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