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

时间:2014-04-10 20:45:37

标签: c# windows-services topshelf

有没有办法在调用TopShelf.HostFactory.Run()之后获取给TopShelf服务的ServiceName和InstanceName?

一种选择是直接从命令行args中提取它。

但好奇的是TopShelf本身是否暴露了这些属性。

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

1 个答案:

答案 0 :(得分:2)

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

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

                s.ConstructUsing(settings =>
                {
                    var serviceName = settings.ServiceName;
                    return new MyService();
                });
            }
         }

或者,如果您的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)  {  }
}

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