Do you want to write services the dotnet core way, using the IHostedService interface? Do you also like the convenience of running windows services using Topshelf? Then use this extension method to run your generic host as a Topshelf service.
Topshelf.Extensions.Hosting is available as a Nuget-package. From the Package Manager Console enter:
Install-Package Topshelf.Extensions.Hosting
Build a generic host the normal way. Use the HostBuilder class as you normally do when building an console app. Replace the .RunAsConsole call with a call to the .RunAsTopshelfService extension method.
First create a service that inherits from IHostedService
class FileWriterService : IHostedService, IDisposable
Then build the generic host to host the service above.
var builder = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<FileWriterService>();
});
The last thing to run this as a Topshelf service is to call the RunAsTopshelfService extension method.
builder.RunAsTopshelfService(hc =>
{
hc.SetServiceName("GenericHostInTopshelf");
hc.SetDisplayName("Generic Host In Topshelf");
hc.SetDescription("Runs a generic host as a Topshelf service.");
});
You'll configure the windows service using the callback on the method. Configuration is done the normal Topshelf way.
I'll be more than happy to get contributions!!!