Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class NinjectServiceHost<T> : ServiceHost
- {
- private readonly IKernel kernel;
- public NinjectServiceHost(IKernel kernel, params Uri[] baseAddresses) : base(typeof(T), baseAddresses)
- {
- if (kernel == null)
- {
- throw new ArgumentException("Ninject kernel must be provided.");
- }
- this.kernel = kernel;
- }
- protected override void OnOpening()
- {
- Description.Behaviors.Add(new NinjectInstanceProviderBehaviorAttribute(new NinjectInstanceProvider<T>(kernel)));
- base.OnOpening();
- }
- }
- internal class NinjectInstanceProviderBehaviorAttribute : Attribute, IServiceBehavior
- {
- private readonly IInstanceProvider instanceProvider;
- public NinjectInstanceProviderBehaviorAttribute(IInstanceProvider instanceProvider)
- {
- this.instanceProvider = instanceProvider;
- }
- public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
- {
- foreach (ChannelDispatcher cd in serviceHostBase.ChannelDispatchers)
- {
- foreach (EndpointDispatcher ed in cd.Endpoints)
- {
- if (!ed.IsSystemEndpoint)
- {
- ed.DispatchRuntime.InstanceProvider = instanceProvider;
- }
- }
- }
- }
- public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters) { }
- public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) { }
- }
- internal class NinjectInstanceProvider<T> : IInstanceProvider
- {
- private readonly IKernel kernel;
- public NinjectInstanceProvider(IKernel kernel)
- {
- this.kernel = kernel;
- }
- public object GetInstance(System.ServiceModel.InstanceContext instanceContext, System.ServiceModel.Channels.Message message)
- {
- return GetInstance(instanceContext);
- }
- public object GetInstance(System.ServiceModel.InstanceContext instanceContext)
- {
- return kernel.Get<T>();
- }
- public void ReleaseInstance(System.ServiceModel.InstanceContext instanceContext, object instance)
- {
- IDisposable disposable = instance as IDisposable;
- if (disposable != null)
- {
- disposable.Dispose();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment