我的理解是,使用内置的依赖项注入(inject)时,.NET Core控制台应用程序将需要您自己创建和管理所有范围,而ASP.NET Core应用程序将默认通过定义的中间件创建和管理HttpRequest
范围。 )。
使用ASP.NET Core,您可以选择创建和管理自己的范围,方法是在需要CreateScope()
之外的服务时调用HttpRequest
。
很明显,每次调用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<>();
}
}
}
最佳答案
CreateScope from IServiceProvider解析IServiceScopeFactory
并对其调用CreateScope()
:
public static IServiceScope CreateScope(this IServiceProvider provider)
{
return provider.GetRequiredService<IServiceScopeFactory>().CreateScope();
}
所以,正如@Evk所说
IServiceProvider
刚刚包装了从CreateScope()
调用的IServiceScopeFactory
关于c# - .NET Core IServiceScopeFactory.CreateScope()与IServiceProvider.CreateScope()扩展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50200200/