diff --git a/src/Ninject.Extensions.Wcf/BaseNinjectServiceHostFactory.cs b/src/Ninject.Extensions.Wcf/BaseNinjectServiceHostFactory.cs index deb5269..1dfbd21 100644 --- a/src/Ninject.Extensions.Wcf/BaseNinjectServiceHostFactory.cs +++ b/src/Ninject.Extensions.Wcf/BaseNinjectServiceHostFactory.cs @@ -68,9 +68,19 @@ public static void SetKernel(IKernel kernel) /// protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) { - return (ServiceHost)kernelInstance.Get( - this.ServiceHostType.MakeGenericType(serviceType), - new ConstructorArgument("baseAddresses", baseAddresses)); + if (ServiceTypeHelper.IsSingletonService(serviceType)) + { + return (ServiceHost)kernelInstance.Get( + this.ServiceHostType.MakeGenericType(serviceType), + new ConstructorArgument("instance", kernelInstance.Get(serviceType)), + new ConstructorArgument("baseAddresses", baseAddresses)); + } + else + { + return (ServiceHost)kernelInstance.Get( + this.ServiceHostType.MakeGenericType(serviceType), + new ConstructorArgument("baseAddresses", baseAddresses)); + } } } } \ No newline at end of file diff --git a/src/Ninject.Extensions.Wcf/BaseNinjectServiceSelfHostFactory.cs b/src/Ninject.Extensions.Wcf/BaseNinjectServiceSelfHostFactory.cs index ff3fb6e..8f8ee85 100644 --- a/src/Ninject.Extensions.Wcf/BaseNinjectServiceSelfHostFactory.cs +++ b/src/Ninject.Extensions.Wcf/BaseNinjectServiceSelfHostFactory.cs @@ -67,9 +67,19 @@ public static void SetKernel(IKernel kernel) /// public ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) { - return (ServiceHost)kernelInstance.Get( - this.ServiceHostType.MakeGenericType(serviceType), - new ConstructorArgument("baseAddresses", baseAddresses)); + if (ServiceTypeHelper.IsSingletonService(serviceType)) + { + return (ServiceHost)kernelInstance.Get( + this.ServiceHostType.MakeGenericType(serviceType), + new ConstructorArgument("instance", kernelInstance.Get(serviceType)), + new ConstructorArgument("baseAddresses", baseAddresses)); + } + else + { + return (ServiceHost)kernelInstance.Get( + this.ServiceHostType.MakeGenericType(serviceType), + new ConstructorArgument("baseAddresses", baseAddresses)); + } } } } \ No newline at end of file diff --git a/src/Ninject.Extensions.Wcf/ServiceHost/NinjectAbstractServiceHost.cs b/src/Ninject.Extensions.Wcf/ServiceHost/NinjectAbstractServiceHost.cs index 59d8c63..38b7e9a 100644 --- a/src/Ninject.Extensions.Wcf/ServiceHost/NinjectAbstractServiceHost.cs +++ b/src/Ninject.Extensions.Wcf/ServiceHost/NinjectAbstractServiceHost.cs @@ -42,14 +42,20 @@ protected NinjectAbstractServiceHost(IServiceBehavior serviceBehavior, T instanc { var addresses = new UriSchemeKeyedCollection(baseAddresses); - if (ServiceTypeHelper.IsSingletonService(instance)) - { - this.InitializeDescription(instance, addresses); - } - else - { - this.InitializeDescription(typeof(T), addresses); - } + this.InitializeDescription(instance, addresses); + } + + /// + /// Initializes a new instance of the class. + /// + /// The service behavior. + /// The baseAddresses. + protected NinjectAbstractServiceHost(IServiceBehavior serviceBehavior, Uri[] baseAddresses) + : base(serviceBehavior) + { + var addresses = new UriSchemeKeyedCollection(baseAddresses); + + this.InitializeDescription(typeof(T), addresses); } } } \ No newline at end of file diff --git a/src/Ninject.Extensions.Wcf/ServiceHost/NinjectIISHostingServiceHost.cs b/src/Ninject.Extensions.Wcf/ServiceHost/NinjectIISHostingServiceHost.cs index 98058c0..09f99a7 100644 --- a/src/Ninject.Extensions.Wcf/ServiceHost/NinjectIISHostingServiceHost.cs +++ b/src/Ninject.Extensions.Wcf/ServiceHost/NinjectIISHostingServiceHost.cs @@ -39,5 +39,15 @@ public NinjectIISHostingServiceHost(IServiceBehavior serviceBehavior, T instance : base(serviceBehavior, instance, baseAddresses) { } + + /// + /// Initializes a new instance of the class. + /// + /// The service behavior. + /// The base addresses. + public NinjectIISHostingServiceHost(IServiceBehavior serviceBehavior, Uri[] baseAddresses) + : base(serviceBehavior, baseAddresses) + { + } } } \ No newline at end of file diff --git a/src/Ninject.Extensions.Wcf/ServiceHost/NinjectServiceHost{T}.cs b/src/Ninject.Extensions.Wcf/ServiceHost/NinjectServiceHost{T}.cs index 3083cd3..5e936a4 100644 --- a/src/Ninject.Extensions.Wcf/ServiceHost/NinjectServiceHost{T}.cs +++ b/src/Ninject.Extensions.Wcf/ServiceHost/NinjectServiceHost{T}.cs @@ -38,5 +38,14 @@ public NinjectServiceHost(IServiceBehavior serviceBehavior, T instance) : base(serviceBehavior, instance, new Uri[0]) { } + + /// + /// Initializes a new instance of the class. + /// + /// The service behavior. + public NinjectServiceHost(IServiceBehavior serviceBehavior) + : base(serviceBehavior, new Uri[0]) + { + } } } \ No newline at end of file diff --git a/src/Ninject.Extensions.Wcf/ServiceTypeHelper.cs b/src/Ninject.Extensions.Wcf/ServiceTypeHelper.cs index ef6033a..88775f3 100644 --- a/src/Ninject.Extensions.Wcf/ServiceTypeHelper.cs +++ b/src/Ninject.Extensions.Wcf/ServiceTypeHelper.cs @@ -20,6 +20,7 @@ namespace Ninject.Extensions.Wcf { + using System; using System.Linq; using System.ServiceModel; @@ -31,14 +32,14 @@ internal static class ServiceTypeHelper /// /// Determines whether the given service is a singleton service. /// - /// The service. + /// The service type. /// /// true if the service is a singleton; otherwise, false. /// - public static bool IsSingletonService(object service) + public static bool IsSingletonService(Type serviceType) { var serviceBehaviorAttribute = - service.GetType().GetCustomAttributes(typeof(ServiceBehaviorAttribute), true) + serviceType.GetCustomAttributes(typeof(ServiceBehaviorAttribute), true) .Cast() .SingleOrDefault(); return serviceBehaviorAttribute != null && serviceBehaviorAttribute.InstanceContextMode == InstanceContextMode.Single; diff --git a/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectAbstractWebServiceHost.cs b/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectAbstractWebServiceHost.cs index 231f179..b7b6677 100644 --- a/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectAbstractWebServiceHost.cs +++ b/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectAbstractWebServiceHost.cs @@ -42,14 +42,20 @@ protected NinjectAbstractWebServiceHost(IServiceBehavior serviceBehavior, T inst { var addresses = new UriSchemeKeyedCollection(baseBaseAddresses); - if (ServiceTypeHelper.IsSingletonService(instance)) - { - this.InitializeDescription(instance, addresses); - } - else - { - this.InitializeDescription(typeof(T), addresses); - } + this.InitializeDescription(instance, addresses); + } + + /// + /// Initializes a new instance of the class. + /// + /// The service behavior. + /// The base addresses. + protected NinjectAbstractWebServiceHost(IServiceBehavior serviceBehavior, Uri[] baseBaseAddresses) + : base(serviceBehavior) + { + var addresses = new UriSchemeKeyedCollection(baseBaseAddresses); + + this.InitializeDescription(typeof(T), addresses); } } } \ No newline at end of file diff --git a/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectIISHostingWebServiceHost.cs b/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectIISHostingWebServiceHost.cs index 9dabf4f..09477c2 100644 --- a/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectIISHostingWebServiceHost.cs +++ b/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectIISHostingWebServiceHost.cs @@ -39,5 +39,15 @@ public NinjectIISHostingWebServiceHost(IServiceBehavior serviceBehavior, T insta : base(serviceBehavior, instance, baseAddresses) { } + + /// + /// Initializes a new instance of the class. + /// + /// The service behavior. + /// The base addresses. + public NinjectIISHostingWebServiceHost(IServiceBehavior serviceBehavior, Uri[] baseAddresses) + : base(serviceBehavior, baseAddresses) + { + } } } \ No newline at end of file diff --git a/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectWebServiceHost{T}.cs b/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectWebServiceHost{T}.cs index 90f7f1f..9d54ea2 100644 --- a/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectWebServiceHost{T}.cs +++ b/src/Ninject.Extensions.Wcf/WebServiceHost/NinjectWebServiceHost{T}.cs @@ -38,5 +38,14 @@ public NinjectWebServiceHost(IServiceBehavior serviceBehavior, T instance) : base(serviceBehavior, instance, new Uri[0]) { } + + /// + /// Initializes a new instance of the class. + /// + /// The service behavior. + public NinjectWebServiceHost(IServiceBehavior serviceBehavior) + : base(serviceBehavior, new Uri[0]) + { + } } } \ No newline at end of file