.NET Core IServiceScopeFactory.CreateScope () против расширения IServiceProvider.CreateScope () - PullRequest
0 голосов
/ 06 мая 2018

Насколько я понимаю, при использовании встроенного внедрения зависимостей консольное приложение .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<>();           
        }
    }
}

и

public class Bar()
{
    public Bar(IServiceScopeFactory scopeFactory)
    {
        using(var scope = scopeFactory.CreateScope())
        {   
            scope.ServiceProvider.GetServices<>();           
        }
    }
}

1 Ответ

0 голосов
/ 17 июля 2018

CreateScope от IServiceProvider разрешение IServiceScopeFactory и вызов CreateScope() для него:

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

Итак, как сказал @ Evk

функционально оба метода идентичны

IServiceProvider только что завернутый вызов CreateScope() с IServiceScopeFactory

...