1 回答

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
第一段代碼稱為服務(wù)定位器反模式,因?yàn)樵谀承┣闆r下您不應(yīng)該這樣做。但是,您問題的答案取決于您未提供的上下文。
在大多數(shù)情況下,不,您不應(yīng)該只注入IServiceProvider. 但是,在某些情況下,您別無選擇,只能:即使用單例范圍內(nèi)的事物。如果您有一個(gè)單例類型的類、一個(gè)IHostedService實(shí)現(xiàn)等,除了其他單例范圍的服務(wù)之外,您不能注入任何東西。如果您需要不同范圍內(nèi)的東西,例如 a DbContext,那么您只能通過注入IServiceProvider和創(chuàng)建范圍來獲得它:
using (var scope = _serviceProvider.CreateScope())
{
var foo = scope.ServiceProvider.GetRequiredService<Foo>();
// do something with foo;
}
但是,請(qǐng)記住,檢索到的實(shí)例與作用域相關(guān)聯(lián)。換句話說,當(dāng)using語句關(guān)閉時(shí),它將被處理掉。因此,您需要在該范圍內(nèi)對(duì)該實(shí)例進(jìn)行任何操作。你不能做一些事情,比如在你的類上設(shè)置一個(gè)實(shí)例變量,然后嘗試使用它,因?yàn)槟銜?huì)得到一個(gè)ObjectDisposedException.
- 1 回答
- 0 關(guān)注
- 199 瀏覽
添加回答
舉報(bào)