.NET Core BackgroundService 中使用依赖注入
在 .NET Core 中,可以使用 .NET Core 的内置依赖注入容器来在 BackgroundService 中使用依赖注入。以下是一些步骤:
- 首先,您需要在 Startup.cs 文件中注册您想要注入的依赖项。例如,如果您想要注入一个名为 MyService 的服务,则可以在 ConfigureServices 方法中添加以下代码:
services.AddScoped<IMyService, MyService>();
- 在您的 BackgroundService 类中,您需要注入 IServiceProvider 以访问依赖项注入容器。您可以在构造函数中注入 IServiceProvider,如下所示:
public class MyBackgroundService : BackgroundService
{
private readonly IServiceProvider _serviceProvider;
public MyBackgroundService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
// 在此处使用依赖项
using (var scope = _serviceProvider.CreateScope())
{
var myService = scope.ServiceProvider.GetRequiredService<IMyService>();
await myService.DoSomethingAsync();
}
}
}
- 在 ExecuteAsync 方法中,您可以使用 CreateScope 方法创建一个新的依赖项注入作用域,并使用 GetRequiredService 方法从该作用域中获取所需的依赖项。在此示例中,我们从作用域中获取 IMyService,并调用 DoSomethingAsync 方法。
请注意,使用 CreateScope 方法创建作用域是非常重要的,因为它确保所有依赖项都能够正确地被处理和释放。如果不使用作用域,则可能会导致内存泄漏或其他问题。
最后,您需要在您的 Startup.cs 文件中注册您的 BackgroundService。您可以在 ConfigureServices 方法中添加以下代码:
services.AddHostedService<MyBackgroundService>();
这将使 .NET Core 运行时在启动时自动创建和启动 MyBackgroundService。使用依赖项注入容器,您可以轻松地注入所需的依赖项并使用它们执行后台任务。
原文地址: https://www.cveoy.top/t/topic/nSWv 著作权归作者所有。请勿转载和采集!