加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – .NET Core IServiceScopeFactory.CreateScope()vs IServic

发布时间:2020-12-15 07:43:26 所属栏目:百科 来源:网络整理
导读:我的理解是,当使用内置依赖注入时,.NET Core控制台应用程序将要求您自己创建和管理所有范围,而ASP.NET Core应用程序将默认通过定义的中间件创建和管理HttpRequest范围(s ). 使用ASP.NET Core,您可以选择创建和管理自己的范围,通过调用CreateScope()来获取Htt
我的理解是,当使用内置依赖注入时,.NET Core控制台应用程序将要求您自己创建和管理所有范围,而ASP.NET Core应用程序将默认通过定义的中间件创建和管理HttpRequest范围(s ).

使用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所说

functionally both methods are identical

IServiceProvider刚刚从IServiceScopeFactory调用CreateScope()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读