diff --git a/src/Nancy.Bootstrappers.Ninject.Tests/Nancy.Bootstrappers.Ninject.Tests.csproj b/src/Nancy.Bootstrappers.Ninject.Tests/Nancy.Bootstrappers.Ninject.Tests.csproj index 9073487..5d6282f 100644 --- a/src/Nancy.Bootstrappers.Ninject.Tests/Nancy.Bootstrappers.Ninject.Tests.csproj +++ b/src/Nancy.Bootstrappers.Ninject.Tests/Nancy.Bootstrappers.Ninject.Tests.csproj @@ -31,10 +31,16 @@ 4 + + ..\packages\Castle.Core.3.0.0.4001\lib\net40-client\Castle.Core.dll + False ..\packages\Ninject.3.0.1.10\lib\net40\Ninject.dll + + ..\packages\Ninject.Extensions.Factory.3.0.1.0\lib\net40\Ninject.Extensions.Factory.dll + diff --git a/src/Nancy.Bootstrappers.Ninject.Tests/NinjectNancyBootstrapperFixture.cs b/src/Nancy.Bootstrappers.Ninject.Tests/NinjectNancyBootstrapperFixture.cs index a442835..6746544 100644 --- a/src/Nancy.Bootstrappers.Ninject.Tests/NinjectNancyBootstrapperFixture.cs +++ b/src/Nancy.Bootstrappers.Ninject.Tests/NinjectNancyBootstrapperFixture.cs @@ -27,15 +27,16 @@ public void Should_be_able_to_resolve_engine() } [Fact] - public void GetAllModules_Returns_As_MultiInstance() + public void GetAllModules_With_Different_Contexts_Returns_Different_Instances() { // Given this.bootstrapper.GetEngine(); - var context = new NancyContext(); + var context1 = new NancyContext(); + var context2 = new NancyContext(); // When - var output1 = this.bootstrapper.GetAllModules(context).FirstOrDefault(nm => nm.GetType() == typeof(FakeNancyModuleWithBasePath)); - var output2 = this.bootstrapper.GetAllModules(context).FirstOrDefault(nm => nm.GetType() == typeof(FakeNancyModuleWithBasePath)); + var output1 = this.bootstrapper.GetAllModules(context1).FirstOrDefault(nm => nm.GetType() == typeof(FakeNancyModuleWithBasePath)); + var output2 = this.bootstrapper.GetAllModules(context2).FirstOrDefault(nm => nm.GetType() == typeof(FakeNancyModuleWithBasePath)); // Then output1.ShouldNotBeNull(); diff --git a/src/Nancy.Bootstrappers.Ninject.Tests/packages.config b/src/Nancy.Bootstrappers.Ninject.Tests/packages.config index bbb1653..df833d2 100644 --- a/src/Nancy.Bootstrappers.Ninject.Tests/packages.config +++ b/src/Nancy.Bootstrappers.Ninject.Tests/packages.config @@ -1,6 +1,8 @@  + + \ No newline at end of file diff --git a/src/Nancy.Bootstrappers.Ninject/FactoryModule.cs b/src/Nancy.Bootstrappers.Ninject/FactoryModule.cs deleted file mode 100644 index 659989f..0000000 --- a/src/Nancy.Bootstrappers.Ninject/FactoryModule.cs +++ /dev/null @@ -1,68 +0,0 @@ -namespace Nancy.Bootstrappers.Ninject -{ - using System; - using System.Linq; - using global::Ninject; - using global::Ninject.Activation; - using global::Ninject.Modules; - using global::Ninject.Parameters; - - /// - /// Helper module for Ninject, in order to be able to resolve dependencies. - /// - public class FactoryModule : NinjectModule - { - /// - /// Loads the module into the kernel. - /// - public override void Load() - { - this.Kernel.Bind(typeof(Func<>)).ToMethod(CreateFunc).When(VerifyFactoryFunction); - } - - private static bool VerifyFactoryFunction(IRequest request) - { - var genericArguments = request.Service.GetGenericArguments(); - if (genericArguments.Count() != 1) - { - return false; - } - - var instanceType = genericArguments.Single(); - return request.ParentContext.Kernel.CanResolve(new Request(genericArguments[0], null, new IParameter[0], null, false, true)) || - TypeIsSelfBindable(instanceType); - } - - private static object CreateFunc(IContext ctx) - { - var functionFactoryType = typeof(FunctionFactory<>).MakeGenericType(ctx.GenericArguments); - var ctor = functionFactoryType.GetConstructors().Single(); - var functionFactory = ctor.Invoke(new object[] { ctx.Kernel }); - return functionFactoryType.GetMethod("Create").Invoke(functionFactory, new object[0]); - } - - private static bool TypeIsSelfBindable(Type service) - { - return !service.IsInterface - && !service.IsAbstract - && !service.IsValueType - && service != typeof(string) - && !service.ContainsGenericParameters; - } - - public class FunctionFactory - { - private readonly IKernel kernel; - - public FunctionFactory(IKernel kernel) - { - this.kernel = kernel; - } - - public Func Create() - { - return () => this.kernel.Get(); - } - } - } -} \ No newline at end of file diff --git a/src/Nancy.Bootstrappers.Ninject/Nancy.Bootstrappers.Ninject.csproj b/src/Nancy.Bootstrappers.Ninject/Nancy.Bootstrappers.Ninject.csproj index a179b93..0ddf7bf 100644 --- a/src/Nancy.Bootstrappers.Ninject/Nancy.Bootstrappers.Ninject.csproj +++ b/src/Nancy.Bootstrappers.Ninject/Nancy.Bootstrappers.Ninject.csproj @@ -51,7 +51,6 @@ Properties\SharedAssemblyInfo.cs - diff --git a/src/Nancy.Bootstrappers.Ninject/NinjectNancyBootstrapper.cs b/src/Nancy.Bootstrappers.Ninject/NinjectNancyBootstrapper.cs index 93e1da6..b7b6932 100644 --- a/src/Nancy.Bootstrappers.Ninject/NinjectNancyBootstrapper.cs +++ b/src/Nancy.Bootstrappers.Ninject/NinjectNancyBootstrapper.cs @@ -55,7 +55,7 @@ protected override sealed INancyEngine GetEngineInternal() /// Container instance protected override IKernel GetApplicationContainer() { - return new StandardKernel(new[] { new FactoryModule() }); + return new StandardKernel(); } /// diff --git a/src/Nancy.Bootstrappers.Ninject/nancy.bootstrappers.ninject.nuspec b/src/Nancy.Bootstrappers.Ninject/nancy.bootstrappers.ninject.nuspec index 62ed1d4..2a8217a 100644 --- a/src/Nancy.Bootstrappers.Ninject/nancy.bootstrappers.ninject.nuspec +++ b/src/Nancy.Bootstrappers.Ninject/nancy.bootstrappers.ninject.nuspec @@ -16,6 +16,7 @@ + Nancy Ninject