From f9023198d3f2bc75d8e5d9ff44198f4d37860ce0 Mon Sep 17 00:00:00 2001 From: Mesa Komarevich Date: Sat, 22 Oct 2022 18:30:36 -0600 Subject: [PATCH 1/2] Fixed issue #578 by setting serviceName to string.Empty if no registrations for the specified serviceType are found. --- src/LightInject/LightInject.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/LightInject/LightInject.cs b/src/LightInject/LightInject.cs index ba28f444..64f3bda3 100644 --- a/src/LightInject/LightInject.cs +++ b/src/LightInject/LightInject.cs @@ -3747,9 +3747,12 @@ private Action GetRegisteredEmitMethod(Type serviceType, string servic if (registrations.Count > 1) { var serviceNames = registrations.Keys.OrderBy(k => k).ToArray(); - var defaultServiceName = string.Empty; serviceName = options.DefaultServiceSelector(serviceNames); } + else + { + serviceName = string.Empty; + } } registrations.TryGetValue(serviceName, out Action emitMethod); From b23c4852f2c0d8915460fd83c112aa55cd0d60ae Mon Sep 17 00:00:00 2001 From: Mesa Komarevich Date: Sat, 22 Oct 2022 18:32:55 -0600 Subject: [PATCH 2/2] Added a class to generate strings that are null, empty, or whitespace. Updated tests calling CanGetInstance to use this sample data. --- src/LightInject.Tests/LazyTests.cs | 14 +++--- .../ServiceContainerTests.cs | 50 +++++++++++-------- src/LightInject.Tests/StringDataGenerator.cs | 16 ++++++ 3 files changed, 53 insertions(+), 27 deletions(-) create mode 100644 src/LightInject.Tests/StringDataGenerator.cs diff --git a/src/LightInject.Tests/LazyTests.cs b/src/LightInject.Tests/LazyTests.cs index d69aab18..6c65728d 100644 --- a/src/LightInject.Tests/LazyTests.cs +++ b/src/LightInject.Tests/LazyTests.cs @@ -38,19 +38,21 @@ public void GetInstance_LazyService_CreatesTargetWhenValuePropertyIsAccessed() Assert.IsAssignableFrom(instance.Value); } - [Fact] - public void CanGetInstance_LazyForKnownService_ReturnsTrue() + [Theory] + [MemberData(nameof(StringDataGenerator.NullOrWhiteSpaceData), MemberType = typeof(StringDataGenerator))] + public void CanGetInstance_LazyForKnownService_ReturnsTrue(string serviceName) { var container = CreateContainer(); container.Register(); - Assert.True(container.CanGetInstance(typeof(Lazy), string.Empty)); + Assert.True(container.CanGetInstance(typeof(Lazy), serviceName)); } - [Fact] - public void CanGetInstance_LazyForUnknownService_ReturnsFalse() + [Theory] + [MemberData(nameof(StringDataGenerator.NullOrWhiteSpaceData), MemberType = typeof(StringDataGenerator))] + public void CanGetInstance_LazyForUnknownService_ReturnsFalse(string serviceName) { var container = CreateContainer(); - Assert.False(container.CanGetInstance(typeof(Lazy), string.Empty)); + Assert.False(container.CanGetInstance(typeof(Lazy), serviceName)); } [Fact] diff --git a/src/LightInject.Tests/ServiceContainerTests.cs b/src/LightInject.Tests/ServiceContainerTests.cs index 2aaedac3..55d761b5 100644 --- a/src/LightInject.Tests/ServiceContainerTests.cs +++ b/src/LightInject.Tests/ServiceContainerTests.cs @@ -1127,59 +1127,67 @@ public void GetInstance_UsingFallbackForDependency_ReturnsSingleInstance() } - [Fact] - public void CanGetInstance_KnownService_ReturnsTrue() + [Theory] + [MemberData(nameof(StringDataGenerator.NullOrWhiteSpaceData), MemberType = typeof(StringDataGenerator))] + public void CanGetInstance_KnownService_ReturnsTrue(string serviceName) { var container = CreateContainer(); container.Register(); - var canCreateInstance = container.CanGetInstance(typeof(IFoo), string.Empty); + var canCreateInstance = container.CanGetInstance(typeof(IFoo), serviceName); Assert.True(canCreateInstance); } - [Fact] - public void CanGetInstance_UnknownService_ReturnFalse() + + [Theory] + [MemberData(nameof(StringDataGenerator.NullOrWhiteSpaceData), MemberType = typeof(StringDataGenerator))] + public void CanGetInstance_UnknownService_ReturnFalse(string serviceName) { var container = CreateContainer(); container.Register(); - var canCreateInstance = container.CanGetInstance(typeof(IBar), string.Empty); + var canCreateInstance = container.CanGetInstance(typeof(IBar), serviceName); Assert.False(canCreateInstance); } - [Fact] - public void CanGetInstance_FuncForKnownService_ReturnsTrue() + [Theory] + [MemberData(nameof(StringDataGenerator.NullOrWhiteSpaceData), MemberType = typeof(StringDataGenerator))] + public void CanGetInstance_FuncForKnownService_ReturnsTrue(string serviceName) { var container = CreateContainer(); container.Register(); - Assert.True(container.CanGetInstance(typeof(Func), string.Empty)); + Assert.True(container.CanGetInstance(typeof(Func), serviceName)); } - [Fact] - public void CanGetInstance_FuncForUnknownService_ReturnsFalse() + [Theory] + [MemberData(nameof(StringDataGenerator.NullOrWhiteSpaceData), MemberType = typeof(StringDataGenerator))] + public void CanGetInstance_FuncForUnknownService_ReturnsFalse(string serviceName) { var container = CreateContainer(); - Assert.False(container.CanGetInstance(typeof(Func), string.Empty)); + Assert.False(container.CanGetInstance(typeof(Func), serviceName)); } - [Fact] - public void CanGetInstance_ExplicitlyRegisteredFunc_ReturnsTrue() + [Theory] + [MemberData(nameof(StringDataGenerator.NullOrWhiteSpaceData), MemberType = typeof(StringDataGenerator))] + public void CanGetInstance_ExplicitlyRegisteredFunc_ReturnsTrue(string serviceName) { var container = CreateContainer(); container.Register>(f => (() => new Foo())); - Assert.True(container.CanGetInstance(typeof(Func), string.Empty)); + Assert.True(container.CanGetInstance(typeof(Func), serviceName)); } - [Fact] - public void CanGetInstance_ParameterizedFuncForKnownService_ReturnsTrue() + [Theory] + [MemberData(nameof(StringDataGenerator.NullOrWhiteSpaceData), MemberType = typeof(StringDataGenerator))] + public void CanGetInstance_ParameterizedFuncForKnownService_ReturnsTrue(string serviceName) { var container = CreateContainer(); container.Register((factory, i) => new FooWithOneParameter(i)); - Assert.True(container.CanGetInstance(typeof(Func), string.Empty)); + Assert.True(container.CanGetInstance(typeof(Func), serviceName)); } - [Fact] - public void CanGetInstance_ParameterizedFuncForUnknownService_ReturnsFalse() + [Theory] + [MemberData(nameof(StringDataGenerator.NullOrWhiteSpaceData), MemberType = typeof(StringDataGenerator))] + public void CanGetInstance_ParameterizedFuncForUnknownService_ReturnsFalse(string serviceName) { var container = CreateContainer(); - Assert.False(container.CanGetInstance(typeof(Func), string.Empty)); + Assert.False(container.CanGetInstance(typeof(Func), serviceName)); } [Fact] diff --git a/src/LightInject.Tests/StringDataGenerator.cs b/src/LightInject.Tests/StringDataGenerator.cs new file mode 100644 index 00000000..51475951 --- /dev/null +++ b/src/LightInject.Tests/StringDataGenerator.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; + +namespace LightInject.Tests; + +public static class StringDataGenerator +{ + public static IEnumerable NullOrWhiteSpaceData() + { + yield return new object[] { null }; + yield return new object[] { string.Empty }; + yield return new object[] { " " }; + yield return new object[] { "\t" }; + yield return new object[] { "\n" }; + yield return new object[] { "\r" }; + } +} \ No newline at end of file