只需要通过上面简朴得两步,既可以将Controller托管到Autofac容器中。可是,我们说过了Autofac还支持属性注入,可是默认的方法只支持结构注入的方法,那么怎么让Controller支持属性注入呢?我们还得从最基础的出发,那就是办理Controller实例存和取的问题
首先为了让Controller托管到Autofac中而且支持属性注入,那么就只能利用Autofac的方法去注册Controller实例,详细操纵是在Startup类中添加ConfigureContainer要领,然后注册Controller并声明支持属性注入
public void ConfigureContainer(ContainerBuilder builder) { var controllerBaseType = typeof(ControllerBase); //扫描Controller类 builder.RegisterAssemblyTypes(typeof(Program).Assembly) .Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType) //属性注入 .PropertiesAutowired(); }
其次是办理取的问题,这里我们就不需要AddControllersAsServices要领了,因为AddControllersAsServices办理了Controller实例在IOC中存和取的问题,可是这里我们只需要办理Controller取得问题说只需要利用ServiceBasedControllerActivator即可,详细操纵是
services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
仅需要在默认的状态下完成这两步,既可以办理Controller托管到Autofac中并支持属性注入的问题,这也是最公道的方法。虽然假如你利用AddControllersAsServices但是可以实现沟通的结果了,只不外是没须要将容器反复的放入容器中了。
总结本文我们报告了关于ASP.NET Core Controller与IOC团结的问题,我以为这是有须要让每小我私家都有所相识的常识点,因为在日常的Web开拓中Controller太常用了,知道这个问题大概会让各人在开拓中少走一点弯路,接下来我们来总结一下本文大抵讲授的内容
首先说明白一个现象,那就是默认环境下Controller并不在IOC容器中,我们也通过几个示例验证了一下。
其次讲授了默认环境下缔造Controller实例真正的类ActivatorUtilities,并大抵讲授了ActivatorUtilities的用途。
然后我们找到了将Controller托管到IOC容器中的步伐AddControllersAsServices,并探究了它的源码,相识了它的事情方法。
最后我们又演示了如何利用最公道的方法将Controller团结Autofac一起利用,而且支持属性注入。
到此这篇关于ASP.NET Core Controller与IOC团结问题整理的文章就先容到这了,更多相关ASP.NET Core Controller与IOC团结问题内容请搜索剧本之家以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持剧本之家!
您大概感乐趣的文章: