ASP.NET Core DI 手动获取注入对象
2017-04-06 23:10
1016 查看
ASP.NET Core DI 一般使用构造函数注入获取对象,比如在
那如果手动获取注入对象呢?
第一种获取方式(有时会获取不到,不推荐使用):
第二种获取方式(推荐使用):
补充:需要注意的是,使用
那怎么手动获取请求生命周期内的注入对象呢?方法如下:
参考资料:
Accessing IServiceProvider in static context
No way to get scope for current http request (Autofac 4)?
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 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
- 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
- ASP.NET Core开发-获取所有注入(DI)服务
- Asp.net core 学习笔记 ( DI 依赖注入 )
- ASP.NET Core 2.0系列学习笔记-DI依赖注入
- ASP.NET Core 注入和获取 AppSettings 配置
- ASP.NET Core中的依赖注入(2):依赖注入(DI)
- Asp.Net Core获取当前上线文对象
- ASP.NET Core中的依赖注入(2):依赖注入(DI)
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- ASP.NET Core中的依赖注入(3): 服务的注册与提供
- ASP.NET后台手动调用POST提交并获取返回值 用于短信平台接口
- C#(ASP.NET)错误: 无法获取属性“0”的值: 对象为 null 或未定义 关键字 'user' 附近有语法错误。
- ASP.NET Core 1.0基础之依赖注入
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【总体设计 】
- [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【解读ServiceCallSite 】
- ASP.NET Core中的依赖注入(1):控制反转(IoC)
- [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject
- [.NET开发] ASP.NET Core 1.0基础之依赖注入