相关疑难解决方法(0)

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

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

和

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

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

23
推荐指数
3
解决办法
1万
查看次数

.NET CORE Lifetime 和 DI 注入的后台任务

我想在asp.net core 中使用后台任务。我找到了有用的文档https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-6.0&tabs=visual-studio

我想知道为什么它们的生命周期显然是有范围的:激活有范围服务的托管服务。作用域服务可以使用依赖项注入 (DI)。 在这方面的范围是什么?

对于 Web 应用程序,范围生命周期表示每个客户端请求(连接)都会创建一次服务。使用 AddScoped 注册作用域服务。在处理请求的应用程序中,作用域服务将在请求结束时被释放。

虽然我确实理解这对于例如对 API 的标准 http get 请求意味着什么,但我不理解作为后台工作者的含义。恕我直言,拥有一个单身背景工作者会更有意义。我当然不希望在我的应用程序中同时运行多个实例。

另一件事是后台工作人员中的 DI,它显然与标准服务不同: 要在后台服务中使用作用域服务,请创建一个作用域。默认情况下,不会为托管服务创建范围。

我无法确认:

    services.AddHostedService(x => new DataPersister(x.GetRequiredService<IAsyncDocumentSession>(), x.GetRequiredService<ILogger>()));
Run Code Online (Sandbox Code Playgroud)

似乎工作得很好。

backgroundworker asp.net-core

2
推荐指数
1
解决办法
7023
查看次数