IServiceBehavior를 구현하여 서비스 동작을 작성하고 인스턴스 공급자를 사용하여 서비스 인스턴스를 초기화해야합니다. 다음은 새로운 서비스 인스턴스를 초기화합니다, 당신은 다른 논리를 구현할 수 있습니다
public class XInstanceProviderServiceBehavior : Attribute, IServiceBehavior
{
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (var item in serviceHostBase.ChannelDispatchers)
{
var dispatcher = item as ChannelDispatcher;
if (dispatcher != null)
{
dispatcher.Endpoints.ToList().ForEach(endpoint =>
{
endpoint.DispatchRuntime.InstanceProvider = new XInstanceProvider(serviceDescription.ServiceType);
});
}
}
}
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
}
을 그리고 인스턴스 공급자 클래스는 IInstanceProvider를 구현하고 getInstance 메소드에 관련 인스턴스를 반환해야합니다.
public XInstanceProvider :IInstanceProvider
{
...
public object GetInstance(InstanceContext instanceContext, System.ServiceModel.Channels.Message message)
{
return new ServiceX();
}
}
그러면 서비스에 servicebehaviour를 추가하면됩니다. 예 :
[XInstanceProviderServiceBehavior()]
public class MyService : IMyService