gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:49:59 25 4
gpt4 key购买 nike

我的理解是,当使用内置的依赖注入(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com