【问题标题】:Get ServiceName/ Instance after calling TopShelf.HostFactory.Run调用 TopShelf.HostFactory.Run 后获取 ServiceName/Instance
【发布时间】:2014-04-10 20:45:36
【问题描述】:

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

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

但很好奇 TopShelf 本身是否公开了这些属性。

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

【问题讨论】:

    标签: c# windows-services topshelf


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多