ASP.NET Core DI手动获取注入对象的方法
程序员文章站
2023-11-09 09:10:46
依赖注入简单介绍:
依赖注入(dependency injection , di)是一种实现对象及其合作者或依赖项之间松散耦合的技术。将类用来执行其操作的这些对象以某种方...
依赖注入简单介绍:
依赖注入(dependency injection , di)是一种实现对象及其合作者或依赖项之间松散耦合的技术。将类用来执行其操作的这些对象以某种方式提供给该类,而不是直接实例化合作者或使用静态引用。
asp.net core di 一般使用构造函数注入获取对象,比如在configureservices配置注入后,通过下面方式获取:
private ivalueservice _valueservice; public valuecontroller(ivalueservice valueservice) { _valueservice = valueservice; }
那如果手动获取注入对象呢?
第一种获取方式(有时会获取不到,不推荐使用):
var services = new servicecollection(); var provider = services.buildserviceprovider(); var _valueservice = provider.getservice<ivalueservice>();
第二种获取方式(推荐使用):
public void configure(iapplicationbuilder app) { servicelocator.instance = app.applicationservices; } public static class servicelocator { public static iserviceprovider instance { get; set; } } public void somerandommethod() { var valueservice = servicelocator.instance.getservice<ivalueservice>(); // do something with service }
补充:需要注意的是,使用servicelocator.instance.getservice<t>();
,只能获取addtransient和addsingleton注入的对象,而不能获取addscoped(请求生命周期内唯一)注入的对象,不是不能获取,而是获取的和构造函数获取的不是相同对象,也就是说获取的对象没有共享,使用场景比如iunitofwork。
那怎么手动获取请求生命周期内的注入对象呢?方法如下:
using microsoft.aspnetcore.http; using microsoft.extensions.dependencyinjection; namespace sample.domain { public class sampledomainservice : idomainservice { private iunitofwork _unitofwork; public sampledomainservice(ihttpcontextaccessor httpcontextaccessor) { _unitofwork = httpcontextaccessor.httpcontext.requestservices.getservice<iunitofwork>(); } } }
ihttpcontextaccessor接口在microsoft.aspnetcore.http.abstractionsnuget
程序包下。
参考资料:
- accessing iserviceprovider in static context
- no way to get scope for current http request (autofac 4)?
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
上一篇: 春季吃什么蔬菜好 适宜春季吃的时令蔬菜
下一篇: 谷雨养生吃啥好?4款美食健脾祛湿
推荐阅读
-
ASP.NET Core DI手动获取注入对象的方法
-
为ASP.NET Core强类型配置对象添加验证的方法
-
ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)
-
ASP.NET Core DI手动获取注入对象的方法
-
ASP.NET Core MVC获取请求的参数方法示例
-
ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)
-
ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)
-
为ASP.NET Core强类型配置对象添加验证的方法
-
ASP.NET Core MVC获取请求的参数方法示例