如果我使用 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.
- 1 回答
- 0 關注
- 198 瀏覽
添加回答
舉報
0/150
提交
取消