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