[英]Start arguments for Windows Background Service in .NET
我正在使用 .NET 的BackgroundService
抽象類(類似於 Microsoft 在本教程中的類)創建 Windows 服務,但我似乎無法弄清楚如何使用 Windows 服務應用程序將啟動參數傳遞給服務。 有人可以告訴我如何獲得我在那里傳遞的論點或我應該做什么嗎?
您必須從Main
傳遞參數:
public static async Task Main(string[] args)
{
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureLogging(options =>
{
options.ClearProviders();
options.AddEventLog();
options.AddConsole();
})
.UseWindowsService(options =>
{
options.ServiceName = "WorkerServiceTestArgs";
})
.ConfigureServices(services =>
{
services.AddSingleton(new MyArgsService(args));
services.AddHostedService<Worker>();
})
.Build();
await host.RunAsync();
}
然后,您的工作人員依賴於您的服務:
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly MyArgsService _myArgsService;
public Worker(ILogger<Worker> logger, MyArgsService myArgsService)
{
_logger = logger;
_myArgsService = myArgsService;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
_logger.LogInformation("Args: {args}", string.Join(";", _myArgsService.GetArgs()));
await Task.Delay(1000, stoppingToken);
}
}
}
例如,使用這個簡單的服務:
public class MyArgsService
{
private readonly string[] _args;
public MyArgsService(string[] args)
{
_args = args;
}
public string[] GetArgs()
{
return _args;
}
}
結果:
創建一個派生自ServiceBase
的類以接收參數並實現IHostLifetime
。
public class MyServiceLifetime : ServiceBase, IHostLifetime
{
protected override void OnStart(string[] args)
{
base.OnStart(args);
}
public public Task WaitForStartAsync(CancellationToken cancellationToken)
=> Task.CompletedTask;
public Task StopAsync(CancellationToken cancellationToken)
=> Task.CompletedTask;
}
將此類替換為UseWindowsService
。
using IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddSingleton<IHostLifetime, MyServiceLifetime>();
services.AddSingleton<JokeService>();
services.AddHostedService<WindowsBackgroundService>();
})
.Build();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.