Autofac的使用
- 引用nuget
Autofac Autofac.Configuration Autofac.Extensions.Dependencylnjection
2.再 Steup 创建 ContainerBuilder 方法
public void ConfigureContainer(ContainerBuilder conBuilder) {
}
3.构造函数注入
~~~
public void ConfigureContainer(ContainerBuilder conBuilder) {
conBuilder.RegisterType<AAA>().As<IAAA>();
}
~~~
4.属性注入
public void ConfigureContainer(ContainerBuilder conBuilder) {
conBuilder.RegisterType<AAA>().As<IAAA>().PropertiesAutowired();
}
生命周期
//瞬时生命周期 每次都是新实例
conBuilder.RegisterType<TestServiceA>().As<ITestServiceA>().InstancePerDependency();
//单例生命周期
~~~
containerBuilder.RegisterType<TestServiceA>().As<ITestServiceA>().SingleInstance();
~~~
//每个生命周期范围一个实例
~~~
containerBuilder.RegisterType<TestServiceA>().As<ITestServiceA>().InstancePerLifetimeScope();
~~~
//每个匹配生命周期范围一个实例
~~~
ContainerBuilder con= new ContainerBuilder();
con.RegisterType<AA>().As<IAA>().InstancePerMatchingLifetimeScope("AA");
IContainer container = con.Build();
using (var sco= container.BeginLifetimeScope("AA"))
{
// 一个USing一个生命周期
}
~~~
每个请求一个实例
~~~
ContainerBuilder con= new ContainerBuilder();
con.RegisterType<AA>().As<IAA>().InstancePerRequest();
IContainer container = containerBuilder.Build();
using (var sco= container.BeginLifetimeScope())
{
IAA A1= sco.Resolve<IAA>();
IAA A2= sco.Resolve<IAA>();
Console.WriteLine(object.ReferenceEquals(A1, A2));
}
~~~
MVC与WebApi
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseServiceProviderFactory(new AutofacServiceProviderFactory());//替换
在Startup类增加ConfigureContainer 方法
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterType<TestServiceA>().As<ITestServiceA>();
builder.RegisterType<TestServiceUpdate>().As<ITestServiceA>();
}
//建议 使用扩展方法,进行使用实现自动注入