[英]Create scope factory in asp.net core
我想在 asp.net core 中創建作用域容器,並在我的單例方法的 2 種方法中使用它。
我已經嘗試在每種 sigleton 方法中創建它。 它有效,但我認為這是開銷。
var scopeFactory = _serviceProvider.GetService<IServiceScopeFactory>();
var scope = scopeFactory.CreateScope();
var scopedContainer = scope.ServiceProvider;
當我需要它時,我會在每種方法中編寫它。 我認為這是邏輯錯誤。 請解釋我如何正確地做到這一點? 謝謝你
從技術上講,您這樣做的方式並沒有錯。 如果您在單例服務中並且需要訪問范圍服務,那么您應該創建一個新的服務范圍並從該范圍的服務提供者處檢索服務。 完成后,您還應該處理 scope 。
在實踐中,您可以稍微簡化一下。 您應該避免將IServiceProvider
直接注入服務。 相反,您可以直接注入IServiceScopeFactory
。 然后您還應該using
語句創建作用域,以確保在使用后正確處理它。
因此,一個示例單例服務可能如下所示:
public class ExampleSingletonService
{
private readonly IServiceScopeFactory _serviceScopeFactory;
public ExampleSingletonService(IServiceScopeFactory serviceScopeFactory)
{
_serviceScopeFactory = serviceScopeFactory;
}
public async Task DoSomethingAsync()
{
using (var scope = _serviceScopeFactory.CreateScope())
{
var db = scope.ServiceProvider.GetService<MyDbContext>();
db.Add(new Foo());
await db.SaveChangesAsync();
}
}
}
如您所見,這方面的開銷並不多。 但這當然會讓您三思是否要在單例中使用范圍服務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.