.NET Core IServiceScopeFactory.CreateScope() 与 IServiceProvider.CreateScope() 扩展

2024-02-20

我的理解是,当使用内置的依赖注入时,.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(使用前将#替换为@)

.NET Core IServiceScopeFactory.CreateScope() 与 IServiceProvider.CreateScope() 扩展 的相关文章

随机推荐