有没有办法在调用TopShelf.HostFactory.Run()之后获取给TopShelf服务的ServiceName和InstanceName?
一种选择是直接从命令行args中提取它。
但好奇的是TopShelf本身是否暴露了这些属性。
在挖掘TopShelf的源代码后,没有看到暴露的点/属性。
答案 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中的服务名称,只需将其作为构造函数参数或属性传递。