私の理解では、組み込みの依存関係注入を使用する場合、.NET Coreコンソールアプリではすべてのスコープを自分で作成および管理する必要がありますが、ASP.NET CoreアプリではデフォルトでHttpRequest
スコープを作成および管理します定義されたミドルウェアを介して。
ASP.NET Coreを使用すると、HttpRequest
の外部に存在するサービスが必要な場合にCreateScope()
を呼び出すことにより、独自のスコープをオプションで作成および管理できます。
IServiceScopeFactory.CreateScope()
を呼び出すと、毎回新しいIServiceScope
が作成されることは明らかです。ただし、IServiceProvider.CreateScope()
拡張メソッドを呼び出すと、毎回新しいIServiceScope
も作成されますか?
基本的に、ASP.NET Coreと.NET Coreの両方のコンソールアプリでスコープを作成する次の方法には、意味のある違いがありますか?
public class Foo()
{
public Foo(IServiceProvider serviceProvider)
{
using(var scope = serviceProvider.CreateScope())
{
scope.ServiceProvider.GetServices<>();
}
}
}
そして
public class Bar()
{
public Bar(IServiceScopeFactory scopeFactory)
{
using(var scope = scopeFactory.CreateScope())
{
scope.ServiceProvider.GetServices<>();
}
}
}
IServiceProviderからCreateScopeIServiceScopeFactory
を解決し、CreateScope()
を呼び出します:
_public static IServiceScope CreateScope(this IServiceProvider provider)
{
return provider.GetRequiredService<IServiceScopeFactory>().CreateScope();
}
_
だから、@ Evkが言ったように
機能的には両方の方法は同一です
IServiceProvider
ラップされた呼び出しIServiceScopeFactory
からのCreateScope()