Sie müssen ein Dienstverhalten schreiben, indem Sie IServiceBehavior implementieren und die Dienstinstanz mithilfe eines Instanzproviders initialisieren. Im Folgenden initialisiert eine neue Service-Instanz, können Sie eine andere Logik implementieren:
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)
{
}
}
Und Ihre Instanz Provider-Klasse haben IInstanceProvider implementieren und damit verbundene Instanz in GetInstance Methode zurückzukehren.
public XInstanceProvider :IInstanceProvider
{
...
public object GetInstance(InstanceContext instanceContext, System.ServiceModel.Channels.Message message)
{
return new ServiceX();
}
}
Dann alles, was Sie brauchen, ist servicebehaviour zu Dienst hinzuzufügen; etwas wie