有没有办法在调用 TopShelf.HostFactory.Run() 后将 ServiceName 和 InstanceName 提供给 TopShelf 服务?
一种选择是直接从命令行参数中提取它。
但是好奇它是否 TopShelf 本身暴露了这些属性。
在挖掘 TopShelf 的来源后,没有看到暴露的点/属性。
有没有办法在调用 TopShelf.HostFactory.Run() 后将 ServiceName 和 InstanceName 提供给 TopShelf 服务?
一种选择是直接从命令行参数中提取它。
但是好奇它是否 TopShelf 本身暴露了这些属性。
在挖掘 TopShelf 的来源后,没有看到暴露的点/属性。
您可以按如下方式获取服务名称(以及描述和显示名称等其他属性):
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 中的服务名称,只需将其作为构造函数参数或属性传递。