2 using System
.Collections
.Generic
;
3 using System
.Collections
.ObjectModel
;
4 using System
.ServiceModel
;
5 using System
.ServiceModel
.Channels
;
6 using System
.ServiceModel
.Description
;
7 using System
.ServiceModel
.Dispatcher
;
9 namespace System
.ServiceModel
.Routing
11 public sealed class RoutingExtension
: IExtension
<ServiceHostBase
>
13 class InstanceProvider
: IInstanceProvider
15 public InstanceProvider (RoutingConfiguration config
)
20 RoutingConfiguration config
;
22 public object GetInstance (InstanceContext instanceContext
)
24 return new RoutingService () { Configuration = config }
;
27 public object GetInstance (InstanceContext instanceContext
, Message message
)
29 return GetInstance (instanceContext
);
32 public void ReleaseInstance (InstanceContext instanceContext
, object instance
)
37 internal RoutingExtension ()
42 RoutingConfiguration configuration
;
44 public void ApplyConfiguration (RoutingConfiguration routingConfiguration
)
46 if (routingConfiguration
== null)
47 throw new ArgumentNullException ("routingConfiguration");
48 configuration
= routingConfiguration
;
53 host
.Opened
+= delegate {
54 foreach (ChannelDispatcher cd
in host
.ChannelDispatchers
)
55 foreach (var ed
in cd
.Endpoints
)
56 if (ed
.ContractNamespace
== "http://schemas.microsoft.com/netfx/2009/05/routing")
57 ed
.DispatchRuntime
.InstanceProvider
= new InstanceProvider (configuration
);
61 void IExtension
<ServiceHostBase
>.Attach (ServiceHostBase owner
)
64 if (configuration
!= null)
65 ApplyConfiguration (configuration
);
68 void IExtension
<ServiceHostBase
>.Detach (ServiceHostBase owner
)