wcf服务初始化
我有一个简单地包装组件方法的服务。 我以编程方式创建服务,并且需要使用组件对其进行初始化(在构造函数中作为参数传入、have setter方法或任何方式)。我的服务在windows服务中自托管。我读过IInstanceProvider和ServiceHost aproach,但我认为这可能更多地用于DI容器,我需要做的应该简单得多。 如有任何建议,将不胜感激。以下是我的示例代码:wcf服务初始化,wcf,parameters,constructor,Wcf,Parameters,Constructor,我有一个简单地包装组件方法的服务。 我以编程方式创建服务,并且需要使用组件对其进行初始化(在构造函数中作为参数传入、have setter方法或任何方式)。我的服务在windows服务中自托管。我读过IInstanceProvider和ServiceHost aproach,但我认为这可能更多地用于DI容器,我需要做的应该简单得多。 如有任何建议,将不胜感激。以下是我的示例代码: 以编程方式创建服务: _plcServiceHost = new ServiceHost(typeof(PLCSer
_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();
[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();
}
您可以使用前面提到的DI(如Unity、Castle等)从服务外部初始化实现 这样,您就可以在
PLCService
构造函数中使用它