我的理解是,当使用内置的依赖注入时,.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<>();
}
}
}
and
public class Bar()
{
public Bar(IServiceScopeFactory scopeFactory)
{
using(var scope = scopeFactory.CreateScope())
{
scope.ServiceProvider.GetServices<>();
}
}
}
从 IServiceProvider 创建作用域 https://github.com/aspnet/DependencyInjection/blob/94b9cc9ace032f838e068702cc70ce57cc883bc7/src/DI.Abstractions/ServiceProviderServiceExtensions.cs#L124解决IServiceScopeFactory
并打电话CreateScope()
on it:
public static IServiceScope CreateScope(this IServiceProvider provider)
{
return provider.GetRequiredService<IServiceScopeFactory>().CreateScope();
}
所以,正如@Evk所说
两种方法在功能上是相同的
IServiceProvider
刚刚结束通话CreateScope()
from IServiceScopeFactory
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)