• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

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

    來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:34:46
    文檔

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

    ASP.NET Core DI手動獲取注入對象的方法:依賴注入簡單介紹: 依賴注入(Dependency injection , DI)是一種實現(xiàn)對象及其合作者或依賴項之間松散耦合的技術。將類用來執(zhí)行其操作的這些對象以某種方式提供給該類,而不是直接實例化合作者或使用靜態(tài)引用。 ASP.NET Core DI 一般使用構造函數(shù)注
    推薦度:
    導讀ASP.NET Core DI手動獲取注入對象的方法:依賴注入簡單介紹: 依賴注入(Dependency injection , DI)是一種實現(xiàn)對象及其合作者或依賴項之間松散耦合的技術。將類用來執(zhí)行其操作的這些對象以某種方式提供給該類,而不是直接實例化合作者或使用靜態(tài)引用。 ASP.NET Core DI 一般使用構造函數(shù)注

    依賴注入簡單介紹:

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

    ASP.NET Core DI 一般使用構造函數(shù)注入獲取對象,比如在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(請求生命周期內(nèi)唯一)注入的對象,不是不能獲取,而是獲取的和構造函數(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 程序包下。

    參考資料:

  • Accessing IServiceProvider in static context
  • No way to get scope for current http request (Autofac 4)?
  • 總結

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    ASP.NET Core DI手動獲取注入對象的方法:依賴注入簡單介紹: 依賴注入(Dependency injection , DI)是一種實現(xiàn)對象及其合作者或依賴項之間松散耦合的技術。將類用來執(zhí)行其操作的這些對象以某種方式提供給該類,而不是直接實例化合作者或使用靜態(tài)引用。 ASP.NET Core DI 一般使用構造函數(shù)注
    推薦度:
    標簽: 手動 對象 di
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 色久综合网精品一区二区| 97视频在线观看这里只有精品| 亚洲日韩国产AV无码无码精品| 欧美精品香蕉在线观看网| 亚洲国产精品无码久久久秋霞2 | 91精品成人免费国产片| 人妻少妇精品无码专区动漫| 久久精品中文字幕无码绿巨人 | 亚洲日韩精品一区二区三区无码| 国产精品无码免费播放| 久久99精品久久久久久不卡| 网友偷拍日韩精品| 精品无码久久久久久午夜| 99精品国产在热久久| 精品欧美激情在线看| 日韩国产成人精品视频| 欧美精品亚洲精品日韩专区va| 国产综合色产在线精品| 人妻熟妇乱又伦精品视频| 久久久九九有精品国产| 欧洲精品一区二区三区在线观看 | 亚洲欧洲美洲无码精品VA| 国产精品天天看天天狠| 国产三级精品三级在线观看专1 | 精品成人一区二区三区四区| 久久精品麻豆日日躁夜夜躁| 91精品国产自产在线观看| 亚洲无码日韩精品第一页| 国产精品福利网站导航| 无码AⅤ精品一区二区三区| 国产福利视精品永久免费| 亚洲第一区精品日韩在线播放| 好属妞这里只有精品久久| 亚洲精品专区| 91麻豆精品一二三区在线| 国语自产少妇精品视频| 欧美日韩国产精品| 国产精品单位女同事在线| 3D动漫精品啪啪一区二区下载| 亚洲精品国产精品国自产观看 | 久久精品无码一区二区无码|