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

ASP.NET Core DI手動獲取注入對象的方法

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

依賴注入簡單介紹:

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

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

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(請求生命周期內(nèi)唯一)注入的對象,不是不能獲取,而是獲取的和構(gòu)造函數(shù)獲取的不是相同對象,也就是說獲取的對象沒有共享,使用場景比如IUnitOfWork。

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

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)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

九龙坡区| 陕西省| 华宁县| 长白| 玛纳斯县| 兰西县| 韶关市| 原阳县| 汕头市| 明溪县| 大洼县| 棋牌| 修武县| 山东省| 房山区| 隆德县| 闽侯县| 洪湖市| 葵青区| 蕲春县| 普宁市| 宾阳县| 东平县| 桐梓县| 临沂市| 论坛| 札达县| 兴仁县| 鄂托克旗| 凤城市| 常宁市| 彰武县| 墨竹工卡县| 鄂尔多斯市| 鹿邑县| 宁国市| 京山县| 元氏县| 茌平县| 承德县| 万源市|