欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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í)吧

依賴注入簡(jiǎn)單介紹:

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

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

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ì)象沒有共享,使用場(chǎng)景比如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é)

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

相關(guān)文章

  • IP地址與整數(shù)之間的轉(zhuǎn)換實(shí)現(xiàn)代碼(asp.net)

    IP地址與整數(shù)之間的轉(zhuǎn)換實(shí)現(xiàn)代碼(asp.net)

    把這個(gè)整數(shù)轉(zhuǎn)換成一個(gè)32位二進(jìn)制數(shù)。從左到右,每8位進(jìn)行一下分割,得到4段8位的二進(jìn)制數(shù),把這些二進(jìn)制數(shù)轉(zhuǎn)換成整數(shù)然后加上”?!本褪沁@個(gè)ip地址了
    2012-09-09
  • asp.net core應(yīng)用docke部署到centos7的全過程

    asp.net core應(yīng)用docke部署到centos7的全過程

    這篇文章主要給大家介紹了關(guān)于asp.net core應(yīng)用docke部署到centos7的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • .NET Core對(duì)象池的應(yīng)用:擴(kuò)展篇

    .NET Core對(duì)象池的應(yīng)用:擴(kuò)展篇

    本文主要講解.NET Core對(duì)象池的池化集合、池化StringBuilder、ArrayPool<T>以及MemoryPool<T>,需要了解的小伙伴可以多學(xué)習(xí)這篇文章,相信可以幫助到你
    2021-09-09
  • asp.net 無刷新附件上傳實(shí)現(xiàn)方法

    asp.net 無刷新附件上傳實(shí)現(xiàn)方法

    一直以來附件上傳都是個(gè)很郁悶的問題,剛開始是利用js添加input file 然后一起提交來實(shí)現(xiàn)多文件上傳,在使用163郵箱的時(shí)候很是羨慕它的附件上傳部分(選擇完文件就提交,可以多個(gè)文件一起上傳,而且還可以獲取上傳進(jìn)度),這時(shí)就很想自己也寫個(gè)那樣的東西出來。
    2010-01-01
  • 詳解asp.net core重新加載應(yīng)用配置

    詳解asp.net core重新加載應(yīng)用配置

    這篇文章主要介紹了asp.net core重新加載應(yīng)用配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • asp.net 讀取配置文件方法

    asp.net 讀取配置文件方法

    asp.net 讀取配置文件方法,需要的朋友可以參考下。
    2011-12-12
  • 淺談VS中的DataPager分頁

    淺談VS中的DataPager分頁

    這篇文章主要介紹了淺談VS中的DataPager分頁的相關(guān)資料和示例,需要的朋友可以參考下
    2015-02-02
  • asp.net中資源文件的使用

    asp.net中資源文件的使用

    .Net是一個(gè)豐富的平臺(tái),在它的結(jié)構(gòu)中,程序集Assembly是自我描述的安裝單元,它可以只包括一個(gè)PE(可移植可執(zhí)行)格式的Dll或exe文件,也可以由多個(gè)文件組成,例如資源、Dll和exe等
    2011-12-12
  • asp.net 點(diǎn)擊按鈕提交后使按鈕變灰不可用

    asp.net 點(diǎn)擊按鈕提交后使按鈕變灰不可用

    asp.net 點(diǎn)擊按鈕提交后使按鈕變灰不可用的實(shí)現(xiàn)代碼。
    2009-06-06
  • 某個(gè)aspx頁面突然死了連日志也沒有的解決方法

    某個(gè)aspx頁面突然死了連日志也沒有的解決方法

    某個(gè)aspx頁面突然死了連日志也沒有,朋友提醒event viewer里看看,果然錯(cuò)誤在那里,有此情況的朋友可以參考下
    2013-08-08

最新評(píng)論