在ASP.NET Core Worker Service中进行依赖注入的常见解决方法如下:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService();
services.AddSingleton();
});
在上述示例中,IMyDependency
是需要注入的接口,MyDependency
是具体的实现类。AddSingleton
方法将MyDependency
注册为单例,这意味着每次注入都会返回同一个实例。
public class Worker : BackgroundService
{
private readonly ILogger _logger;
private readonly IMyDependency _myDependency;
public Worker(ILogger logger, IMyDependency myDependency)
{
_logger = logger;
_myDependency = myDependency;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
// 使用注入的依赖
_myDependency.DoSomething();
await Task.Delay(1000, stoppingToken);
}
}
}
在上述示例中,ILogger
是已经内置的依赖注入,无需手动注册。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService();
})
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton();
});
在上述示例中,AddSingleton
方法将MyDependency
注册为单例,与第一种方法相同。
这些解决方法可根据实际需求进行选择和组合使用。注意,在使用依赖注入之前,需要确保已经安装了Microsoft.Extensions.DependencyInjection
包。
上一篇:ASP.NET Core Windows身份验证 - 仅接受本地管理员凭据
下一篇:ASP.NET Core Worker Windows Service - 错误1053:服务未能及时响应启动或控制请求