6

TopShelf.HostFactory.Run() の呼び出し後に TopShelf サービスに指定された ServiceName と InstanceName を取得する方法はありますか?

1 つのオプションは、コマンド ライン引数から直接プルすることです。

しかし、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 に答える