国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

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

2024-07-10 12:48:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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

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

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ì)象,也就是說(shuō)獲取的對(duì)象沒(méi)有共享,使用場(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 程序包下。

參考資料:

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

總結(jié)

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 壶关县| 红安县| 昭觉县| 信丰县| 东海县| 兴业县| 枣庄市| 沭阳县| 淮安市| 会宁县| 醴陵市| 宁远县| 荣成市| 宣恩县| 阳东县| 托克逊县| 花莲县| 宁武县| 大丰市| 关岭| 房产| 罗平县| 闸北区| 平度市| 天柱县| 巴彦淖尔市| 嘉禾县| 株洲市| 阿城市| 安泽县| 清原| 福泉市| 铜陵市| 林甸县| 澄城县| 沁水县| 河南省| 灌南县| 遂川县| 紫金县| 岢岚县|