繁体   English   中英

如何清洁地退出Topshelf

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM