gpt4 book ai didi

c# - 如何干净地退出 Topshelf

转载 作者:行者123 更新时间:2023-11-30 17:43:11 27 4
gpt4 key购买 nike

基于 this question 处的样本它处理将自定义参数传递给 Topshelf,我现在希望能够干净地退出 Topshelf HostFactory。

我有以下代码,它确实有效,但当它“返回”时,控制台显示一个丑陋的错误,指出 Topshelf.HostFactory Error: 0 : An exception occurred creating the host... 服务是未正确配置...ServiceBuilderFactory 不能为空

我应该使用什么来代替 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() 方法中,您可以在其中验证命令行参数是否存在。如果你的条件不满足,抛出异常,服务将启动失败。

如果您在其他任何地方执行此操作,安装/卸载/等的命令行选项。如果没有指定该命令行参数,将无法工作。

关于c# - 如何干净地退出 Topshelf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31298125/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com