[英]How to Cleanly Exit Topshelf
基于此问题的示例处理将自定义参数传递给Topshelf,我现在希望能够干净地退出Topshelf HostFactory。
我有以下代码,它确实有效,但当它“返回”时,控制台显示一个丑陋的错误,说明Topshelf.HostFactory Error: 0 : An exception occurred creating the host... The service was not properly configured... ServiceBuilderFactory must not be null
我应该使用什么而不是return
来简单地告诉Topshelf退出而不做任何事情?
string foo = null;
HostFactory.Run(x =>
{
x.AddCommandLineDefinition("foo", f => { foo = f; });
x.ApplyCommandLine();
if (!string.IsNullOrEmpty(foo))
{
Console.WriteLine("A value for Foo was received... exiting.");
return;
}
x.Service<MyService>(s =>
{
s.ConstructUsing(() => new MyService());
s.WhenStarted(z => z.Start());
s.WhenStopped(z => z.Stop());
});
x.StartAutomatically();
});
在这种情况下,您不应该在代码中调用.ApplyCommandLine()
,它由Topshelf自动处理。 重要的是要认识到您此时正在配置主机,并且不应该抛出异常。
命令行值检查的最佳位置是ConstructUsing()方法,您可以在其中验证命令行参数是否存在。 如果您的条件不满意,则抛出异常,服务将无法启动。
如果您在其他任何地方执行此操作,则安装/卸载/等的命令行选项。 没有指定命令行参数将无法工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.