c# - .NET Core IServiceScopeFactory.CreateScope() 与 IServiceProvider.CreateScope() 扩展

标签 c# asp.net-core dependency-injection .net-core

我的理解是,当使用内置的依赖注入(inject)时,.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<>();           
        }
    }
}

最佳答案

CreateScope from IServiceProvider解析 IServiceScopeFactory 并对其调用 CreateScope():

public static IServiceScope CreateScope(this IServiceProvider provider)
{
    return provider.GetRequiredService<IServiceScopeFactory>().CreateScope();
}

所以,正如@Evk 所说

functionally both methods are identical

IServiceProvider 刚刚从 IServiceScopeFactory

调用 CreateScope()

关于c# - .NET Core IServiceScopeFactory.CreateScope() 与 IServiceProvider.CreateScope() 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200200/

相关文章:

c# - 调用标量值函数时,ExecuteScalar 始终返回 null

visual-studio - 包还原失败/.Net Core 安装错误

Asp.net Core 2 Identity with IdentityServer4 和电子邮件确认 : Correlation failed. 未找到 cookie

java - 使用 Java (JDBC) 使用单独的类与 MySql 进行通信

php - 依赖注入(inject)和/或工厂模式

javascript - Karma jasmine 和 Angular Controller 使用 'Controller as' 语法(这而不是 $scope)

c# - 如何防止 AutoFixture 的 GuardClauseAssertion 检查继承类中的构造函数?

c# - QueryString.Add 不向 ASP.NET Core 中的请求查询字符串添加值

c# - 恢复窗口时是否在 C# 中引发了事件?

asp.net-core - 获取分配角色的用户