如何通过在.Net 6中添加"开始"、"停止"和"重新启动"



如何通过在.Net 6中添加启动、停止和重新启动事件处理,使webApi成为Windows服务?在.Net 5和之前,我通常会做一个类似的AppStartup:

public interface IAppStartup
{
Task StartAsync();
Task StopAsync();
Task RestartService(IHostedService hostedService);
}
public class AppStartup : IAppStartup
{
private readonly string[] _args;
private readonly CancellationTokenSource _cancellationTokenSource = new();
private IHost _host;
private static AppStartup _appStartup;
private AppStartup(string[] args)
{
_args = args;
}
public async Task StartAsync()
{
try
{                
_host = CreateHostBuilder(_args).Build();
var setting = _host.Services.GetService<AppSettings>();
if (setting != null)
{
///
}
await _host.RunAsync(_cancellationTokenSource.Token);
}
catch (Exception e)
{
///
throw;
}
}
public async Task StopAsync()
{
try
{                
await _host.StopAsync(_cancellationTokenSource.Token);
}
catch (Exception e)
{
///
throw;
}
}
public async Task RestartService(IHostedService hostedService)
{
if (hostedService!=null)
{
await hostedService.StopAsync(_cancellationTokenSource.Token);
await hostedService.StartAsync(_cancellationTokenSource.Token);
}
}      
}    

现在在.Net 6中,我很困惑,因为已经没有Startup方法可以调用了。请告知我您用于将Windows服务功能添加到web API项目中的任何解决方案。

.NET 5和.NET 6都支持Windows服务生存期,它为您挂接到Start/Stop中。所以在你的程序中基本上就是这样。cs:

host = CreateHostBuilder(args)
.UseWindowsService(...)
.Build();
var setting = host.Services.GetService<AppSettings>();
if (setting != null)
{
///
}
await host.RunAsync();

最新更新