.net core手动获取注入服务实例

第一种获取方式(有时会获取不到,不推荐使用):

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(); ,只能获取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>();
  }
 }
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值