0
我有一个简单的包装组件方法的服务。 我以编程方式创建服务,我需要用组件初始化它(要么作为参数传递给构造函数,要么使用setter方法,要么传入任何方式)。我的服务是在Windows服务中自行托管的。我阅读了IInstanceProvider和ServiceHost的aproach,但我认为这可能更多地用于DI容器,我需要做的事情应该更简单。 任何意见,将不胜感激。这里是我的示例代码:wcf服务初始化
编程方式创建服务:
_plcServiceHost = new ServiceHost(typeof(PLCService)); foreach (var plc in PLCRepository.GetAllLocal()) { var baseAddress = plc.LocalEndpointName; var binding = new NetTcpBinding(); _plcServiceHost.AddServiceEndpoint(typeof(IPLCService), binding, baseAddress); AddMetadataExchange(_plcServiceHost, baseAddress); } _plcServiceHost.Open();
这是我想怎么有我的服务(2a或2b)。 2a。使用setter的PLC服务:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class PLCService : IPLCService
{
#region fields
public static volatile object HardwareLock = new object();
private IPLCImpl _plc;
private Semaphore _unsubscribeSem;
private bool _isSubscribed;
#endregion
public void SetPLC(IPLCImpl plc)
{
if (plc == null) throw new ArgumentNullException("plc");
_plc = plc;
_plc.Connect();
}
2b。 PLC服务与构造函数初始化:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class PLCService : IPLCService
{
#region fields
public static volatile object HardwareLock = new object();
private readonly IPLCImpl _plc;
private Semaphore _unsubscribeSem;
private bool _isSubscribed;
#endregion
public PLCService(IPLCImpl plc)
{
if (plc == null) throw new ArgumentNullException("plc");
_plc = plc;
_plc.Connect();
}