wpf,console类程序,集成
public static void Run()
{
var serviceP = new ServiceCollection().AddTransient<A>();
var autoContainer = new ContainerBuilder();
autoContainer.Populate(serviceP);
autoContainer.RegisterType<AInAutoFac>();
var container = autoContainer.Build();
var ss = new AutofacServiceProvider(container);
var a1 = ss.GetService<A>();
var a2 = ss.GetService<A>();
}
class A
{ }
class AInAutoFac
{
}
public class Base
{
public Base()
{
Console.WriteLine($"Created:{GetType().Name}");
}
}
public interface IAccount { }
public interface IMessage { }
public interface ITool { }
public class Account : Base, IAccount { }
public class Message : Base, IMessage { }
public class Tool : Base, ITool { }
public static void Run()
{
var serviceCollection = new ServiceCollection()
.AddTransient<ITool, Tool>();
var containerBuilder = new ContainerBuilder();
containerBuilder.Populate(serviceCollection);
containerBuilder.RegisterType<Test>().As<ITest>().PropertiesAutowired();
containerBuilder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.Where(t => t.BaseType == typeof(Base))
.As(t => t.GetInterfaces()[0])
.InstancePerLifetimeScope();
var container = containerBuilder.Build();
IServiceProvider provider = new AutofacServiceProvider(container);
Debug.Assert(provider.GetService<IAccount>() is Account);
Debug.Assert(provider.GetService<IMessage>() is Message);
Debug.Assert(provider.GetService<ITool>() is Tool);
var test = provider.GetService<ITest>();
Debug.Assert(test.Message is Message);
Console.Read();
}
Aspnet core 集成autofac
使用autofac工厂
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseServiceProviderFactory(new AutofacServiceProviderFactory());
Startup 里面添加容器配置
public void ConfigureContainer(ContainerBuilder builder)
{
var assembly = Assembly.GetExecutingAssembly();
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly())
.Where(t => t.Namespace == assembly.GetName().Name + ".Services")
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
}
Aspnet core 集成Scrutor
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.Scan(scan => scan
.FromAssemblyOf<Startup>()
.AddClasses(classes =>
classes.Where(t => t.Name.EndsWith("Service", StringComparison.OrdinalIgnoreCase)))
.UsingRegistrationStrategy(RegistrationStrategy.Throw)
.AsMatchingInterface()
.WithScopedLifetime()
);
}