diff --git a/src/Ninject.Test/Integration/ReadOnlyKernelTests.cs b/src/Ninject.Test/Integration/ReadOnlyKernelTests.cs index f8015ad2..cc098f9c 100644 --- a/src/Ninject.Test/Integration/ReadOnlyKernelTests.cs +++ b/src/Ninject.Test/Integration/ReadOnlyKernelTests.cs @@ -81,6 +81,38 @@ public void TryGetOfT_Parameters_ReturnsNullIfMultipleBindingsExistForADependenc bindings.Should().HaveCount(1); } + [Fact] + public void TryGetOfT_NameAndParameters_ReturnsNullIfMultipleBindingsExistForResolvedService() + { + Configuration.Bind().To().Named("a"); + Configuration.Bind().To().Named("a"); + Configuration.Bind().To(); + + Kernel = Configuration.BuildReadOnlyKernel(); + + var warrior = Kernel.TryGet("a", Array.Empty()); + warrior.Should().BeNull(); + + var bindings = Kernel.GetBindings(typeof(IWarrior)); + bindings.Should().HaveCount(2); + } + + [Fact] + public void TryGetOfT_ConstraintAndParameters_ReturnsNullIfMultipleBindingsExistForResolvedService() + { + Configuration.Bind().To(); + Configuration.Bind().To(); + Configuration.Bind().To(); + + Kernel = Configuration.BuildReadOnlyKernel(); + + var warrior = Kernel.TryGet((metadata) => true, Array.Empty()); + warrior.Should().BeNull(); + + var bindings = Kernel.GetBindings(typeof(IWarrior)); + bindings.Should().HaveCount(2); + } + [Fact] public void TryGetOfT_Parameters_ReturnsNullIfOnlyUnmetConditionalBindingsExistForADependency() { @@ -194,6 +226,22 @@ public void TryGet_ServiceAndNameAndParameters_ReturnsNullIfMultipleBindingsExis bindings.Should().HaveCount(1); } + [Fact] + public void TryGet_ServiceAndNameAndParameters_ReturnsNullIfMultipleBindingsExistForResolvedService() + { + Configuration.Bind().To().Named("a"); + Configuration.Bind().To().Named("a"); + Configuration.Bind().To(); + + Kernel = Configuration.BuildReadOnlyKernel(); + + var warrior = Kernel.TryGet(typeof(IWarrior), "a", Array.Empty()); + warrior.Should().BeNull(); + + var bindings = Kernel.GetBindings(typeof(IWarrior)); + bindings.Should().HaveCount(2); + } + [Fact] public void TryGet_ServiceAndNameAndParameters_ReturnsNullIfOnlyUnmetConditionalBindingsExistForADependency() { @@ -292,6 +340,22 @@ public void TryGet_ServiceAndConstraintAndParameters_ReturnsNullIfOnlyUnmetCondi var bindings = Kernel.GetBindings(typeof(IWarrior)); bindings.Should().HaveCount(1); } + + [Fact] + public void TryGet_ServiceAndConstraintAndParameters_ReturnsNullIfMultipleBindingsExistForResolvedService() + { + Configuration.Bind().To(); + Configuration.Bind().To(); + Configuration.Bind().To(); + + Kernel = Configuration.BuildReadOnlyKernel(); + + var warrior = Kernel.TryGet(typeof(IWarrior), (metadata) => true, Array.Empty()); + warrior.Should().BeNull(); + + var bindings = Kernel.GetBindings(typeof(IWarrior)); + bindings.Should().HaveCount(2); + } } public class WhenTryGetIsCalledForServiceWithMultipleBindingsOfSameWeight : ReadOnlyKernelContext diff --git a/src/Ninject/Syntax/ResolutionExtensions.cs b/src/Ninject/Syntax/ResolutionExtensions.cs index bd3d2249..3c4f3827 100644 --- a/src/Ninject/Syntax/ResolutionExtensions.cs +++ b/src/Ninject/Syntax/ResolutionExtensions.cs @@ -281,7 +281,7 @@ public static object TryGet(this IResolutionRoot root, Type service, params IPar /// public static object TryGet(this IResolutionRoot root, Type service, string name, params IParameter[] parameters) { - return TryGet(() => ResolveSingle(root, service, b => b.Name == name, parameters, true, false)); + return TryGet(() => ResolveSingle(root, service, b => b.Name == name, parameters, true, true)); } /// @@ -296,7 +296,7 @@ public static object TryGet(this IResolutionRoot root, Type service, string name /// public static object TryGet(this IResolutionRoot root, Type service, Func constraint, params IParameter[] parameters) { - return TryGet(() => ResolveSingle(root, service, constraint, parameters, true, false)); + return TryGet(() => ResolveSingle(root, service, constraint, parameters, true, true)); } ///