最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET Core DI手動(dòng)獲取注入對(duì)象的方法

 更新時(shí)間:2018年11月03日 16:24:46   作者:田園里的蟋蟀  
這篇文章主要給大家介紹了關(guān)于ASP.NET Core DI手動(dòng)獲取注入對(duì)象的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

依賴注入簡單介紹:

依賴注入(Dependency injection , DI)是一種實(shí)現(xiàn)對(duì)象及其合作者或依賴項(xiàng)之間松散耦合的技術(shù)。將類用來執(zhí)行其操作的這些對(duì)象以某種方式提供給該類,而不是直接實(shí)例化合作者或使用靜態(tài)引用。

ASP.NET Core DI 一般使用構(gòu)造函數(shù)注入獲取對(duì)象,比如在ConfigureServices配置注入后,通過下面方式獲取:

private IValueService _valueService;

public ValueController(IValueService valueService)
{
 _valueService = valueService;
}

那如果手動(dòng)獲取注入對(duì)象呢?

第一種獲取方式(有時(shí)會(huì)獲取不到,不推薦使用):

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
}

補(bǔ)充:需要注意的是,使用ServiceLocator.Instance.GetService<T>(); ,只能獲取AddTransient和AddSingleton注入的對(duì)象,而不能獲取AddScoped(請(qǐng)求生命周期內(nèi)唯一)注入的對(duì)象,不是不能獲取,而是獲取的和構(gòu)造函數(shù)獲取的不是相同對(duì)象,也就是說獲取的對(duì)象沒有共享,使用場景比如IUnitOfWork。

那怎么手動(dòng)獲取請(qǐng)求生命周期內(nèi)的注入對(duì)象呢?方法如下:

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 程序包下。

參考資料:

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

五台县| 南京市| 兴仁县| 洞口县| 平陆县| 红安县| 正镶白旗| 广丰县| 合水县| 横山县| 宜宾县| 宣威市| 星座| 临海市| 丰顺县| 汶上县| 友谊县| 鄂托克前旗| 泸水县| 化州市| 丰原市| 临海市| 闽清县| 桂平市| 嵩明县| 青冈县| 枞阳县| 焦作市| 通城县| 越西县| 固始县| 道孚县| 绥德县| 巴中市| 合江县| 云霄县| 湖州市| 双江| 洞头县| 惠安县| 库车县|