我觉得我在这里缺少一些非常简单的东西。代码如下:
public partial class DatabaseService : ServiceBase
{
internal static ServiceHost incomingCallServiceHost;
internal static ServiceHost personServiceHost;
public DatabaseService()
{
InitializeComponent();
}
private void StartService<TService>(ServiceHost svchost)
{
svchost?.Close();
svchost = new ServiceHost(typeof(TService));
svchost.Open();
}
private void StopService(ServiceHost svchost)
{
if (svchost != null)
{
svchost.Close();
svchost = null;
}
}
protected override void OnStart(string[] args)
{
try
{
StartService<IncomingCallService>(incomingCallServiceHost);
StartService<PersonService>(personServiceHost);
}
catch(System.Exception ex)
{
EventLog.WriteEntry(ex.Message);
}
}
protected override void OnStop()
{
StopService(incomingCallServiceHost);
StopService(personServiceHost);
}
}
编译此代码时,会警告两个ServiceHost
变量永远不会初始化,并且始终为null。
我可以将变量初始化的唯一方法是从StartService
方法中获取代码并将其放入OnStart
方法中,这会创建重复且重复的代码。
protected override void OnStart(string[] args)
{
try
{
incomingCallServiceHost?.Close();
incomingCallServiceHost = new ServiceHost(typeof(IncomingCallService));
incomingCallServiceHost.Open();
personServiceHost?.Close();
personServiceHost = new ServiceHost(typeof(PersonService));
personServiceHost.Open();
}
catch(System.Exception ex)
{
EventLog.WriteEntry(ex.Message);
}
}
感觉就像通用方法应该在这里工作,但事实并非如此。这是为什么?
答案 0 :(得分:0)
本来应该提出这个,但Evk得到了正确答案。需要在ServiceHost参数上使用ref关键字。