亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果我使用 ServiceProvider 接口來解析我在 .NET Core 中的屬性進行依賴

如果我使用 ServiceProvider 接口來解析我在 .NET Core 中的屬性進行依賴

C#
素胚勾勒不出你 2021-11-21 14:49:14
如果我使用 ServiceProvider 接口來解析我在 .NET Core 中的屬性進行依賴注入會不會很糟糕假設我有以下內容    private readonly IRecipeRepository _recipeRepository;    private readonly IMediaResource _resourceUpload;    private readonly IAWSMedia _awsMedia;然后這樣做    public RecipeService(IServiceProvider service)    {        _recipeRepository = service.GetService<IRecipeRepository>();        _resourceUpload = service.GetService<IMediaResource>();        _awsMedia = service.GetService<IAWSMedia>();    }而不是這個    public RecipeService(IRecipeRepository recipeRepo, IMediaResource media, IAWSMedia awsMedia )    {        _recipeRepository = recipeRepo;        _resourceUpload = media;        _awsMedia = awsMedia ;    }
查看完整描述

1 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

第一段代碼稱為服務定位器反模式,因為在某些情況下您不應該這樣做。但是,您問題的答案取決于您未提供的上下文。


在大多數情況下,不,您不應該只注入IServiceProvider. 但是,在某些情況下,您別無選擇,只能:即使用單例范圍內的事物。如果您有一個單例類型的類、一個IHostedService實現等,除了其他單例范圍的服務之外,您不能注入任何東西。如果您需要不同范圍內的東西,例如 a DbContext,那么您只能通過注入IServiceProvider和創建范圍來獲得它:


using (var scope = _serviceProvider.CreateScope())

{

    var foo = scope.ServiceProvider.GetRequiredService<Foo>();

    // do something with foo;

}

但是,請記住,檢索到的實例與作用域相關聯。換句話說,當using語句關閉時,它將被處理掉。因此,您需要在該范圍內對該實例進行任何操作。你不能做一些事情,比如在你的類上設置一個實例變量,然后嘗試使用它,因為你會得到一個ObjectDisposedException.


查看完整回答
反對 回復 2021-11-21
  • 1 回答
  • 0 關注
  • 198 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號