调用TopShelf.HostFactory.Run后获取ServiceName/Instance

Rya*_*son 6 c# windows-services topshelf

有没有办法在调用TopShelf.HostFactory.Run()之后将ServiceName和InstanceName赋予TopShelf服务?

一种选择是直接从命令行args中拉出它.

但好奇的是,TopShelf是否会暴露这些属性本身.

在挖掘TopShelf的源代码后,没有看到暴露的点/属性.

Ser*_*pov 5

您可以获取服务名称(以及其他属性,如描述和显示名称),如下所示:

        HostFactory.Run(x =>
        {
            x.Service((ServiceConfigurator<MyService> s) =>
            {

                s.ConstructUsing(settings =>
                {
                    var serviceName = settings.ServiceName;
                    return new MyService();
                });
            }
         }
Run Code Online (Sandbox Code Playgroud)

或者如果您的 MyService 实现了 ServiceControl

        HostFactory.Run(x =>
        {
            x.Service<MyService>((s) =>
            {
                var serviceName = s.ServiceName;

                return new MyService();
            });
         }
/***************************/

class MyService : ServiceControl
{
    public bool Start(HostControl hostControl) {  }

    public bool Stop(HostControl hostControl)  {  }
}
Run Code Online (Sandbox Code Playgroud)

如果您需要 MyService 中的服务名称,只需将其作为构造函数参数或属性传递即可。