使用Autofac替换Core中自带的DI
Autofac比Core中自带的DI功能强大的多,可以考虑替换
nuget安装Autofac 、 Autofac.Extensions.DependencyInjection
将Startup.cs中的ConfigureServices
返回类型改为IServiceProvider,然后新起一个方法RegisterAutofac把创建容器的代码放到其中
public IServiceProvider ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); return RegisterAutofac(services);//注册Autofac }
private IServiceProvider RegisterAutofac(IServiceCollection services) { //实例化Autofac容器 var builder = new ContainerBuilder(); //将Services中的服务填充到Autofac中 builder.Populate(services); //新模块组件注册 //builder.RegisterModule<AutofacModuleRegister>(); //创建容器 var Container = builder.Build(); //第三方IOC接管 core内置DI容器 return new AutofacServiceProvider(Container); }
哦了,替换完了。现在可以同时使用IServiceProvider、ILifetimeScope解析服务。
未完待续...