ASP.NET Core DI手动获取注入对象的方法
更新时间:2018年11月03日 16:24:46 作者:田园里的蟋蟀
这篇文章主要给大家介绍了关于ASP.NET Core 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)?
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对华域联盟的支持。
您可能感兴趣的文章:详解ASP.NET Core实现强类型Configuration读取配置数据ASP.NET Core 奇淫技巧之伪属性注入的实现详解asp.net core 依赖注入ASP.NET Core 过滤器中使用依赖注入知识点总结ASP.NET Core依赖注入系列教程之控制反转(IoC)ASP.NET Core依赖注入系列教程之服务的注册与提供详解ASP.NET Core 中的框架级依赖注入详解ASP.NET Core 在 JSON 文件中配置依赖注入如何在ASP.NET Core 的任意类中注入Configuration
di
手动
注入对象
相关文章
Asp.Net Cache缓存使用代码本例完成建立缓存,清除缓存使用缓存进行数据绑定
2008-12-12
Asp.net SignalR支持的平台有哪些Asp.net SignalR支持的平台有哪些,这篇文章主要介绍了Asp.net SignalR支持的平台,需要的朋友可以参考下 2016-04-04
ASP.NET获取各级目录Server.MapPath详解全ASP.NET获取各级目录Server.MapPath详解全,需要的朋友可以参考下。 2011-12-12
.NET截取指定长度汉字超出部分以"…"代替 实例分享.NET截取指定长度汉字超出部分以"…"代替 实例分享,需要的朋友可以参考一下 2013-06-06
asp.net 字符串、二进制、编码数组转换函数字符串和二进制数组转换、将HTML文件显示为页面的一部分、UTF8和GB2312之间的转换 2010-01-01
ASP.NET编程简单实现生成静态页面的方法【附demo源码下载】这篇文章主要介绍了ASP.NET编程简单实现生成静态页面的方法,较为详细的分析了asp.net生成静态页面的步骤与相关操作技巧,并附带相关实例源码供读者下载参考,需要的朋友可以参考下 2017-07-07
详解.Net单元测试方法本篇文章给大家详细讲述了.NET单元测试的详细方法和步骤,有需要的朋友参考学习下。 2018-07-07
asp.net(c#)捕捉搜索引擎蜘蛛和机器人结合这个你就可以写一个蜘蛛访问记录了,如何判断正常用户或者蜘蛛?可以粗略的这样来判断:通过判断用户的访问来源页面 2008-08-08
JQuery为用户控件(ASCX)赋值与接口的应用在网页动态加载用户控件,并使用JQuery为来把网页处理的值传给用户控件,此文利用了接口方面的知识,感兴趣的各位可以参考下哈 2013-03-03
.net平台推送ios消息的实现方法这篇文章主要介绍了.net平台推送ios消息的实现方法,详细讲述了各个具体的实现步骤并附有源码供大家参考之用,需要的朋友可以参考下 2014-10-10
最新评论

评论(0)