王坚良,碧岭生态村,风之无限社区
参考:
需要引用:autofac, autofac.extensions.dependencyinjection
在program.cs 使用autofacserviceproviderfactory进行容器替换。
public static ihostbuilder createhostbuilder(string[] args) => host.createdefaultbuilder(args) .configurewebhostdefaults(webbuilder => { webbuilder.usestartup<startup>(); }).useserviceproviderfactory(new autofacserviceproviderfactory());
在startup 服务配置中加入控制器替换规则。
public void configureservices(iservicecollection services) { services.replace(servicedescriptor .transient<icontrolleractivator, servicebasedcontrolleractivator>()); services.addcontrollers(); }
建立一个module,实现属性注入,及自定义接口注册。
public class defaultmodule : autofac.module { protected override void load(containerbuilder containerbuilder) { //获取所有控制器类型并使用属性注入 var controllerbasetype = typeof(controllerbase); containerbuilder.registerassemblytypes(typeof(program).assembly) .where(t => controllerbasetype.isassignablefrom(t) && t != controllerbasetype) .propertiesautowired(); //containerbuilder.registertype<xiaomi>().as<iphone>().propertiesautowired(); } }
在startup中注册module即可使用控制器属性注入。
public void configurecontainer(containerbuilder builder) { builder.registermodule<defaultmodule>(); }
有时在系统初始化完成,接口和相应类注册完毕后想读取某个接口进行自定义初始化构建。比如初始化自定义工厂,加载外部dll,在不知外部类情况下进行初始化构建自己的服务。
代码比较简单,但是不知道的话比较伤脑筋。代码如下:
public void configure(iapplicationbuilder app, iwebhostenvironment env, ihost host) { using (var container = host.services.createscope()) { iphone phone= container.serviceprovider.getservice<iphone>(); } app.userouting(); app.useauthorization(); app.useendpoints(endpoints => { endpoints.mapcontrollers(); }); }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论