Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. class MsInstanceProvider : IInstanceProvider, IServiceBehavior
  2. {
  3. private readonly IServiceProvider m_container;
  4. private object _instance;
  5.  
  6. public MsInstanceProvider(IServiceProvider container)
  7. {
  8. m_container = container;
  9. }
  10.  
  11. public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
  12. {
  13. }
  14.  
  15. public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
  16. {
  17. }
  18.  
  19. public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
  20. {
  21. foreach (ChannelDispatcherBase channelDispatcherBase in serviceHostBase.ChannelDispatchers)
  22. {
  23. ChannelDispatcher cd = (ChannelDispatcher)channelDispatcherBase;
  24. foreach (EndpointDispatcher ed in cd.Endpoints)
  25. {
  26. if (!ed.IsSystemEndpoint)
  27. {
  28. ed.DispatchRuntime.InstanceProvider = this;
  29. }
  30. }
  31. }
  32. }
  33.  
  34. public object GetInstance(InstanceContext instanceContext)
  35. {
  36. return _instance ?? (_instance = m_container.GetService(instanceContext.Host.Description.ServiceType.GetInterfaces().First()));
  37. }
  38.  
  39. public object GetInstance(InstanceContext instanceContext, Message message)
  40. {
  41. return GetInstance(instanceContext);
  42. }
  43.  
  44. public void ReleaseInstance(InstanceContext instanceContext, object instance)
  45. {
  46. (instance as IDisposable)?.Dispose();
  47. }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement