IOC-------控制反转
既然全都交给容器来管理,自然容器可以管理对象的生命周期,还有AOP(在注入的时候进行一些逻辑)
.Net Core 内置了一个IOC容器,在ServiceCollection中,有三个生命周期
AddTransient-----瞬时,用的最多
AddScoped-----一个请求只有一个实例
AddSingleton-----一个线程只有一个实例
但是ServiceCollection也有局限性:无法批量注入,无法实现AOP。
解决方案:利用第三方IOC容器,如Atuofac
Step1:引入两个程序集Autofac.Extras.DynamicProxy(Autofac的动态代理,它依赖Autofac,所以可以不用单独引入Autofac)、Autofac.Extensions.DependencyInjection(Autofac的扩展)
Step2:在Program.cs中替代旧有容器
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceProviderFactory(new AutofacServiceProviderFactory()) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
Step3:在Startup.cs中添加ConfigureContainer方法
public void ConfigureContainer(ContainerBuilder containerBuilder) { var assemblyFiles = Assembly.LoadFrom("filePathName"); //指定已扫描程序集中的类型注册为提供所有其实现的接口。 containerBuilder.RegisterAssemblyTypes(assemblyFiles).AsImplementedInterfaces(); }