6

有没有办法在调用 TopShelf.HostFactory.Run() 后将 ServiceName 和 InstanceName 提供给 TopShelf 服务?

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

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

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

4

1 回答 1

3

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

        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 中的服务名称,只需将其作为构造函数参数或属性传递。

于 2014-11-14T13:45:17.683 回答