.NET Core IServiceScopeFactory.CreateScope()vs IServiceProvider.CreateScope()扩展
我的理解是,当使用内置dependency injection时,.NET Core控制台应用程序将要求您自己创建和管理所有范围,而ASP.NET Core应用程序将默认通过定义的中间件创建和管理HttpRequest
范围(s )。
使用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的CreateScope解析IServiceScopeFactory
并在其上调用CreateScope()
:
public static IServiceScope CreateScope(this IServiceProvider provider) { return provider.GetRequiredService().CreateScope(); }
所以,正如@Evk所说
function上两种方法都是相同的
IServiceProvider
刚刚从IServiceScopeFactory
调用CreateScope()