Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MsInstanceProvider : IInstanceProvider, IServiceBehavior
- {
- private readonly IServiceProvider m_container;
- private object _instance;
- public MsInstanceProvider(IServiceProvider container)
- {
- m_container = container;
- }
- public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
- {
- }
- public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
- {
- }
- public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
- {
- foreach (ChannelDispatcherBase channelDispatcherBase in serviceHostBase.ChannelDispatchers)
- {
- ChannelDispatcher cd = (ChannelDispatcher)channelDispatcherBase;
- foreach (EndpointDispatcher ed in cd.Endpoints)
- {
- if (!ed.IsSystemEndpoint)
- {
- ed.DispatchRuntime.InstanceProvider = this;
- }
- }
- }
- }
- public object GetInstance(InstanceContext instanceContext)
- {
- return _instance ?? (_instance = m_container.GetService(instanceContext.Host.Description.ServiceType.GetInterfaces().First()));
- }
- public object GetInstance(InstanceContext instanceContext, Message message)
- {
- return GetInstance(instanceContext);
- }
- public void ReleaseInstance(InstanceContext instanceContext, object instance)
- {
- (instance as IDisposable)?.Dispose();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement