1预读在阅读本文之前,您可以阅读:Topshelf一个用于使用.NET构建Windows服务框架2使用2.1创建应用程序首先,创建一个新的控制台应用程序,并获得Topshelf和
Microsoft。来自nuget
在阅读本文之前,您可以阅读:
Topshelf一个用于使用.NET构建Windows服务框架
2使用2.1创建应用程序首先,创建一个新的控制台应用程序,并获得Topshelf和
Microsoft。来自nuget的Extensions.hosting包。
TopshelfMicrosoft.Extensions.Hosting
当然,我们还需要安装Serilog相关的日志框架。
Serilog.Extensions.HostingSerilog.Settings.ConfigurationSerilog.Sinks.ConsoleSerilog.Sinks.FileTopshelf.Serilog
2.2创建. NET通用主机然后,我们首先设置CreateHostBuilder()方法,加载Serilog日志,注入MyService和AppSettings。作为Topshelf使用的主逻辑程序,MyService类提供Start()和Stop()作为Topshelf执行或停止主逻辑程序的动作。
class Program{ static void Main(string[] args) { var host = CreateHostBuilder(args).Build(); } public static IHostBuilder CreateHostBuilder(string[] args) => Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) .UseSerilog() .ConfigureServices((hostContext, services) => { services.Configure<AppSettings>(hostContext.Configuration); services.AddTransient<MyService>(); });}
2.3在Topshelf中注册服务然后,在Topshelf中注册我们的服务类。跳转到Program.cs并添加:
class Program{ static void Main(string[] args) { var host = CreateHostBuilder(args).Build(); RunWindowsServiceWithHost(host); } private static void RunWindowsServiceWithHost(IHost host) { var rc = HostFactory.Run(x => { x.UseSerilog(); x.SetDisplayName("我的服务"); x.SetDescription("我的服务详细描述"); x.SetServiceName("MyService"); var myService = host.Services.GetRequiredService<MyService>(); x.Service<MyService>(s => { s.ConstructUsing(() => myService); s.WhenStarted(tc => tc.Start()); s.WhenStopped(tc => tc.Stop()); }); x.RunAsLocalSystem(); x.StartAutomatically(); }); var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode()); Environment.ExitCode = exitCode; }}
2.4 MyService类然后,我们来看看MyService类,主要演示ILogger和AppSettings的注入。
public class MyService{ private readonly ILogger logger; private readonly AppSettings settings; public MyService(IOptions<AppSettings> settings, ILogger<MyService> logger) { this.settings = settings.Value; this.logger = logger; } public void Start() { logger.LogInformation($"Starting {this.settings.ServiceName}..."); } public void Stop() { logger.LogInformation($"Stopping {this.settings.ServiceName}..."); }}
2.5运行应用程序最后,F5执行应用程序。如果一切顺利,您应该会看到如下内容: