2014-04-10 20 views
5

Esiste un modo per ottenere ServiceName e InstanceName assegnati a un servizio TopShelf dopo una chiamata a TopShelf.HostFactory.Run()?Ottieni ServiceName/Instance dopo aver chiamato TopShelf.HostFactory.Run

Un'opzione è semplicemente estrarla direttamente dalla riga di comando args.

Ma curioso se TopShelf espone queste proprietà.

Dopo aver scavato nella fonte di TopShelf, non si vede una macchia/proprietà che espone.

risposta

2

È possibile ottenere il nome del servizio (e di altri immobili come descrizione e il nome visualizzato) come segue:

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

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

Oppure, se il MyService implementa 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) { } 
} 

Se è necessario il nome del servizio all'interno MyService solo passalo come parametro costruttore o proprietà.