diff --git a/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizerFactory.cs b/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizerFactory.cs index e488019e87..51fe250caf 100644 --- a/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizerFactory.cs +++ b/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizerFactory.cs @@ -6,7 +6,6 @@ using System.Collections.Concurrent; using System.IO; using System.Reflection; using System.Resources; -using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Options; namespace Microsoft.Extensions.Localization @@ -24,29 +23,20 @@ namespace Microsoft.Extensions.Localization private readonly IResourceNamesCache _resourceNamesCache = new ResourceNamesCache(); private readonly ConcurrentDictionary _localizerCache = new ConcurrentDictionary(); - private readonly string _applicationName; private readonly string _resourcesRelativePath; /// /// Creates a new . /// - /// The . /// The . public ResourceManagerStringLocalizerFactory( - IHostingEnvironment hostingEnvironment, IOptions localizationOptions) { - if (hostingEnvironment == null) - { - throw new ArgumentNullException(nameof(hostingEnvironment)); - } - if (localizationOptions == null) { throw new ArgumentNullException(nameof(localizationOptions)); } - _applicationName = hostingEnvironment.ApplicationName; _resourcesRelativePath = localizationOptions.Value.ResourcesPath ?? string.Empty; if (!string.IsNullOrEmpty(_resourcesRelativePath)) { @@ -162,7 +152,10 @@ namespace Microsoft.Extensions.Localization throw new ArgumentNullException(nameof(baseName)); } - location = location ?? _applicationName; + if (location == null) + { + throw new ArgumentNullException(nameof(location)); + } return _localizerCache.GetOrAdd($"B={baseName},L={location}", _ => { diff --git a/src/Microsoft.Extensions.Localization/exceptions.net45.json b/src/Microsoft.Extensions.Localization/exceptions.net45.json new file mode 100644 index 0000000000..02d37d7d31 --- /dev/null +++ b/src/Microsoft.Extensions.Localization/exceptions.net45.json @@ -0,0 +1,9 @@ +[ + { + "OldTypeId": "public class Microsoft.Extensions.Localization.ResourceManagerStringLocalizerFactory : Microsoft.Extensions.Localization.IStringLocalizerFactory", + "OldMemberId": "public .ctor(Microsoft.AspNetCore.Hosting.IHostingEnvironment hostingEnvironment, Microsoft.Extensions.Options.IOptions localizationOptions)", + "NewTypeId": "public class Microsoft.Extensions.Localization.ResourceManagerStringLocalizerFactory : Microsoft.Extensions.Localization.IStringLocalizerFactory", + "NewMemberId": "public .ctor(Microsoft.Extensions.Options.IOptions localizationOptions)", + "Kind": "Modification" + } +] \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization/exceptions.netcore.json b/src/Microsoft.Extensions.Localization/exceptions.netcore.json new file mode 100644 index 0000000000..02d37d7d31 --- /dev/null +++ b/src/Microsoft.Extensions.Localization/exceptions.netcore.json @@ -0,0 +1,9 @@ +[ + { + "OldTypeId": "public class Microsoft.Extensions.Localization.ResourceManagerStringLocalizerFactory : Microsoft.Extensions.Localization.IStringLocalizerFactory", + "OldMemberId": "public .ctor(Microsoft.AspNetCore.Hosting.IHostingEnvironment hostingEnvironment, Microsoft.Extensions.Options.IOptions localizationOptions)", + "NewTypeId": "public class Microsoft.Extensions.Localization.ResourceManagerStringLocalizerFactory : Microsoft.Extensions.Localization.IStringLocalizerFactory", + "NewMemberId": "public .ctor(Microsoft.Extensions.Options.IOptions localizationOptions)", + "Kind": "Modification" + } +] \ No newline at end of file diff --git a/src/Microsoft.Extensions.Localization/project.json b/src/Microsoft.Extensions.Localization/project.json index fce8810739..ae565361d3 100644 --- a/src/Microsoft.Extensions.Localization/project.json +++ b/src/Microsoft.Extensions.Localization/project.json @@ -19,7 +19,6 @@ "xmlDoc": true }, "dependencies": { - "Microsoft.AspNetCore.Hosting.Abstractions": "1.2.0-*", "Microsoft.Extensions.DependencyInjection.Abstractions": "1.2.0-*", "Microsoft.Extensions.Localization.Abstractions": { "target": "project" diff --git a/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs b/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs index 70032985a7..2643ab175a 100644 --- a/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs +++ b/test/Microsoft.Extensions.Localization.Tests/ResourceManagerStringLocalizerFactoryTest.cs @@ -1,9 +1,9 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.IO; using System.Reflection; -using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Options; using Moq; using Xunit; @@ -18,10 +18,9 @@ namespace Microsoft.Extensions.Localization.Tests public string BaseName { get; private set; } public TestResourceManagerStringLocalizerFactory( - IHostingEnvironment hostingEnvironment, IOptions localizationOptions, ResourceLocationAttribute resourceLocationAttribute) - : base(hostingEnvironment, localizationOptions) + : base(localizationOptions) { _resourceLocationAttribute = resourceLocationAttribute; } @@ -46,19 +45,15 @@ namespace Microsoft.Extensions.Localization.Tests public void Create_OverloadsProduceSameResult() { // Arrange - var hostingEnvironment = new Mock(); - hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication"); var locOptions = new LocalizationOptions(); var options = new Mock>(); options.Setup(o => o.Value).Returns(locOptions); var resourceLocationAttribute = new ResourceLocationAttribute(Path.Combine("My", "Resources")); var typeFactory = new TestResourceManagerStringLocalizerFactory( - hostingEnvironment.Object, options.Object, resourceLocationAttribute); var stringFactory = new TestResourceManagerStringLocalizerFactory( - hostingEnvironment.Object, options.Object, resourceLocationAttribute); var type = typeof(ResourceManagerStringLocalizerFactoryTest); @@ -77,12 +72,10 @@ namespace Microsoft.Extensions.Localization.Tests public void Create_FromType_ReturnsCachedResultForSameType() { // Arrange - var hostingEnvironment = new Mock(); - hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication"); var locOptions = new LocalizationOptions(); var options = new Mock>(); options.Setup(o => o.Value).Returns(locOptions); - var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object); + var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object); // Act var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest)); @@ -96,12 +89,10 @@ namespace Microsoft.Extensions.Localization.Tests public void Create_FromType_ReturnsNewResultForDifferentType() { // Arrange - var hostingEnvironment = new Mock(); - hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication"); var locOptions = new LocalizationOptions(); var options = new Mock>(); options.Setup(o => o.Value).Returns(locOptions); - var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object); + var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object); // Act var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest)); @@ -115,13 +106,11 @@ namespace Microsoft.Extensions.Localization.Tests public void Create_FromType_ResourcesPathDirectorySeperatorToDot() { // Arrange - var hostingEnvironment = new Mock(); var locOptions = new LocalizationOptions(); locOptions.ResourcesPath = Path.Combine("My", "Resources"); var options = new Mock>(); options.Setup(o => o.Value).Returns(locOptions); var factory = new TestResourceManagerStringLocalizerFactory( - hostingEnvironment.Object, options.Object, resourceLocationAttribute: null); @@ -136,12 +125,10 @@ namespace Microsoft.Extensions.Localization.Tests public void Create_FromNameLocation_ReturnsCachedResultForSameNameLocation() { // Arrange - var hostingEnvironment = new Mock(); - hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication"); var locOptions = new LocalizationOptions(); var options = new Mock>(); options.Setup(o => o.Value).Returns(locOptions); - var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object); + var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object); var location = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName; // Act @@ -156,12 +143,10 @@ namespace Microsoft.Extensions.Localization.Tests public void Create_FromNameLocation_ReturnsNewResultForDifferentName() { // Arrange - var hostingEnvironment = new Mock(); - hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication"); var locOptions = new LocalizationOptions(); var options = new Mock>(); options.Setup(o => o.Value).Returns(locOptions); - var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object); + var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object); var location = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName; // Act @@ -176,12 +161,10 @@ namespace Microsoft.Extensions.Localization.Tests public void Create_FromNameLocation_ReturnsNewResultForDifferentLocation() { // Arrange - var hostingEnvironment = new Mock(); - hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication"); var locOptions = new LocalizationOptions(); var options = new Mock>(); options.Setup(o => o.Value).Returns(locOptions); - var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object); + var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object); var location1 = new AssemblyName(typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName).Name; var location2 = new AssemblyName(typeof(ResourceManagerStringLocalizerFactoryTest).GetTypeInfo().Assembly.FullName).Name; @@ -197,41 +180,32 @@ namespace Microsoft.Extensions.Localization.Tests public void Create_FromNameLocation_ResourcesPathDirectorySeparatorToDot() { // Arrange - var hostingEnvironment = new Mock(); - hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("Microsoft.Extensions.Localization.Tests"); var locOptions = new LocalizationOptions(); locOptions.ResourcesPath = Path.Combine("My", "Resources"); var options = new Mock>(); options.Setup(o => o.Value).Returns(locOptions); var factory = new TestResourceManagerStringLocalizerFactory( - hostingEnvironment.Object, options.Object, resourceLocationAttribute: null); // Act - var result1 = factory.Create("baseName", location: null); + var result1 = factory.Create("baseName", location: "Microsoft.Extensions.Localization.Tests"); // Assert Assert.Equal("Microsoft.Extensions.Localization.Tests.My.Resources.baseName", factory.BaseName); } [Fact] - public void Create_FromNameLocation_NullLocationUsesApplicationPath() + public void Create_FromNameLocation_NullLocationThrows() { // Arrange - var hostingEnvironment = new Mock(); - hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("Microsoft.Extensions.Localization.Tests"); var locOptions = new LocalizationOptions(); var options = new Mock>(); options.Setup(o => o.Value).Returns(locOptions); - var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object); + var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object); - // Act - var result1 = factory.Create("baseName", location: null); - var result2 = factory.Create("baseName", location: null); - - // Assert - Assert.Same(result1, result2); + // Act & Assert + Assert.Throws(() => factory.Create("baseName", location: null)); } } }