Remove dependency on Hosting.Abstractions
This commit is contained in:
parent
e81627ba02
commit
65e3af98d5
|
|
@ -6,7 +6,6 @@ using System.Collections.Concurrent;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Resources;
|
using System.Resources;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
namespace Microsoft.Extensions.Localization
|
namespace Microsoft.Extensions.Localization
|
||||||
|
|
@ -24,29 +23,20 @@ namespace Microsoft.Extensions.Localization
|
||||||
private readonly IResourceNamesCache _resourceNamesCache = new ResourceNamesCache();
|
private readonly IResourceNamesCache _resourceNamesCache = new ResourceNamesCache();
|
||||||
private readonly ConcurrentDictionary<string, ResourceManagerStringLocalizer> _localizerCache =
|
private readonly ConcurrentDictionary<string, ResourceManagerStringLocalizer> _localizerCache =
|
||||||
new ConcurrentDictionary<string, ResourceManagerStringLocalizer>();
|
new ConcurrentDictionary<string, ResourceManagerStringLocalizer>();
|
||||||
private readonly string _applicationName;
|
|
||||||
private readonly string _resourcesRelativePath;
|
private readonly string _resourcesRelativePath;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new <see cref="ResourceManagerStringLocalizer"/>.
|
/// Creates a new <see cref="ResourceManagerStringLocalizer"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="hostingEnvironment">The <see cref="IHostingEnvironment"/>.</param>
|
|
||||||
/// <param name="localizationOptions">The <see cref="IOptions{LocalizationOptions}"/>.</param>
|
/// <param name="localizationOptions">The <see cref="IOptions{LocalizationOptions}"/>.</param>
|
||||||
public ResourceManagerStringLocalizerFactory(
|
public ResourceManagerStringLocalizerFactory(
|
||||||
IHostingEnvironment hostingEnvironment,
|
|
||||||
IOptions<LocalizationOptions> localizationOptions)
|
IOptions<LocalizationOptions> localizationOptions)
|
||||||
{
|
{
|
||||||
if (hostingEnvironment == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(hostingEnvironment));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (localizationOptions == null)
|
if (localizationOptions == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(localizationOptions));
|
throw new ArgumentNullException(nameof(localizationOptions));
|
||||||
}
|
}
|
||||||
|
|
||||||
_applicationName = hostingEnvironment.ApplicationName;
|
|
||||||
_resourcesRelativePath = localizationOptions.Value.ResourcesPath ?? string.Empty;
|
_resourcesRelativePath = localizationOptions.Value.ResourcesPath ?? string.Empty;
|
||||||
if (!string.IsNullOrEmpty(_resourcesRelativePath))
|
if (!string.IsNullOrEmpty(_resourcesRelativePath))
|
||||||
{
|
{
|
||||||
|
|
@ -162,7 +152,10 @@ namespace Microsoft.Extensions.Localization
|
||||||
throw new ArgumentNullException(nameof(baseName));
|
throw new ArgumentNullException(nameof(baseName));
|
||||||
}
|
}
|
||||||
|
|
||||||
location = location ?? _applicationName;
|
if (location == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(location));
|
||||||
|
}
|
||||||
|
|
||||||
return _localizerCache.GetOrAdd($"B={baseName},L={location}", _ =>
|
return _localizerCache.GetOrAdd($"B={baseName},L={location}", _ =>
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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<Microsoft.Extensions.Localization.LocalizationOptions> localizationOptions)",
|
||||||
|
"NewTypeId": "public class Microsoft.Extensions.Localization.ResourceManagerStringLocalizerFactory : Microsoft.Extensions.Localization.IStringLocalizerFactory",
|
||||||
|
"NewMemberId": "public .ctor(Microsoft.Extensions.Options.IOptions<Microsoft.Extensions.Localization.LocalizationOptions> localizationOptions)",
|
||||||
|
"Kind": "Modification"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -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<Microsoft.Extensions.Localization.LocalizationOptions> localizationOptions)",
|
||||||
|
"NewTypeId": "public class Microsoft.Extensions.Localization.ResourceManagerStringLocalizerFactory : Microsoft.Extensions.Localization.IStringLocalizerFactory",
|
||||||
|
"NewMemberId": "public .ctor(Microsoft.Extensions.Options.IOptions<Microsoft.Extensions.Localization.LocalizationOptions> localizationOptions)",
|
||||||
|
"Kind": "Modification"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -19,7 +19,6 @@
|
||||||
"xmlDoc": true
|
"xmlDoc": true
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Microsoft.AspNetCore.Hosting.Abstractions": "1.2.0-*",
|
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "1.2.0-*",
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "1.2.0-*",
|
||||||
"Microsoft.Extensions.Localization.Abstractions": {
|
"Microsoft.Extensions.Localization.Abstractions": {
|
||||||
"target": "project"
|
"target": "project"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// 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.
|
// 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.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -18,10 +18,9 @@ namespace Microsoft.Extensions.Localization.Tests
|
||||||
public string BaseName { get; private set; }
|
public string BaseName { get; private set; }
|
||||||
|
|
||||||
public TestResourceManagerStringLocalizerFactory(
|
public TestResourceManagerStringLocalizerFactory(
|
||||||
IHostingEnvironment hostingEnvironment,
|
|
||||||
IOptions<LocalizationOptions> localizationOptions,
|
IOptions<LocalizationOptions> localizationOptions,
|
||||||
ResourceLocationAttribute resourceLocationAttribute)
|
ResourceLocationAttribute resourceLocationAttribute)
|
||||||
: base(hostingEnvironment, localizationOptions)
|
: base(localizationOptions)
|
||||||
{
|
{
|
||||||
_resourceLocationAttribute = resourceLocationAttribute;
|
_resourceLocationAttribute = resourceLocationAttribute;
|
||||||
}
|
}
|
||||||
|
|
@ -46,19 +45,15 @@ namespace Microsoft.Extensions.Localization.Tests
|
||||||
public void Create_OverloadsProduceSameResult()
|
public void Create_OverloadsProduceSameResult()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
|
||||||
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
|
||||||
var locOptions = new LocalizationOptions();
|
var locOptions = new LocalizationOptions();
|
||||||
var options = new Mock<IOptions<LocalizationOptions>>();
|
var options = new Mock<IOptions<LocalizationOptions>>();
|
||||||
options.Setup(o => o.Value).Returns(locOptions);
|
options.Setup(o => o.Value).Returns(locOptions);
|
||||||
|
|
||||||
var resourceLocationAttribute = new ResourceLocationAttribute(Path.Combine("My", "Resources"));
|
var resourceLocationAttribute = new ResourceLocationAttribute(Path.Combine("My", "Resources"));
|
||||||
var typeFactory = new TestResourceManagerStringLocalizerFactory(
|
var typeFactory = new TestResourceManagerStringLocalizerFactory(
|
||||||
hostingEnvironment.Object,
|
|
||||||
options.Object,
|
options.Object,
|
||||||
resourceLocationAttribute);
|
resourceLocationAttribute);
|
||||||
var stringFactory = new TestResourceManagerStringLocalizerFactory(
|
var stringFactory = new TestResourceManagerStringLocalizerFactory(
|
||||||
hostingEnvironment.Object,
|
|
||||||
options.Object,
|
options.Object,
|
||||||
resourceLocationAttribute);
|
resourceLocationAttribute);
|
||||||
var type = typeof(ResourceManagerStringLocalizerFactoryTest);
|
var type = typeof(ResourceManagerStringLocalizerFactoryTest);
|
||||||
|
|
@ -77,12 +72,10 @@ namespace Microsoft.Extensions.Localization.Tests
|
||||||
public void Create_FromType_ReturnsCachedResultForSameType()
|
public void Create_FromType_ReturnsCachedResultForSameType()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
|
||||||
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
|
||||||
var locOptions = new LocalizationOptions();
|
var locOptions = new LocalizationOptions();
|
||||||
var options = new Mock<IOptions<LocalizationOptions>>();
|
var options = new Mock<IOptions<LocalizationOptions>>();
|
||||||
options.Setup(o => o.Value).Returns(locOptions);
|
options.Setup(o => o.Value).Returns(locOptions);
|
||||||
var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object);
|
var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest));
|
var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest));
|
||||||
|
|
@ -96,12 +89,10 @@ namespace Microsoft.Extensions.Localization.Tests
|
||||||
public void Create_FromType_ReturnsNewResultForDifferentType()
|
public void Create_FromType_ReturnsNewResultForDifferentType()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
|
||||||
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
|
||||||
var locOptions = new LocalizationOptions();
|
var locOptions = new LocalizationOptions();
|
||||||
var options = new Mock<IOptions<LocalizationOptions>>();
|
var options = new Mock<IOptions<LocalizationOptions>>();
|
||||||
options.Setup(o => o.Value).Returns(locOptions);
|
options.Setup(o => o.Value).Returns(locOptions);
|
||||||
var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object);
|
var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest));
|
var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest));
|
||||||
|
|
@ -115,13 +106,11 @@ namespace Microsoft.Extensions.Localization.Tests
|
||||||
public void Create_FromType_ResourcesPathDirectorySeperatorToDot()
|
public void Create_FromType_ResourcesPathDirectorySeperatorToDot()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
|
||||||
var locOptions = new LocalizationOptions();
|
var locOptions = new LocalizationOptions();
|
||||||
locOptions.ResourcesPath = Path.Combine("My", "Resources");
|
locOptions.ResourcesPath = Path.Combine("My", "Resources");
|
||||||
var options = new Mock<IOptions<LocalizationOptions>>();
|
var options = new Mock<IOptions<LocalizationOptions>>();
|
||||||
options.Setup(o => o.Value).Returns(locOptions);
|
options.Setup(o => o.Value).Returns(locOptions);
|
||||||
var factory = new TestResourceManagerStringLocalizerFactory(
|
var factory = new TestResourceManagerStringLocalizerFactory(
|
||||||
hostingEnvironment.Object,
|
|
||||||
options.Object,
|
options.Object,
|
||||||
resourceLocationAttribute: null);
|
resourceLocationAttribute: null);
|
||||||
|
|
||||||
|
|
@ -136,12 +125,10 @@ namespace Microsoft.Extensions.Localization.Tests
|
||||||
public void Create_FromNameLocation_ReturnsCachedResultForSameNameLocation()
|
public void Create_FromNameLocation_ReturnsCachedResultForSameNameLocation()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
|
||||||
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
|
||||||
var locOptions = new LocalizationOptions();
|
var locOptions = new LocalizationOptions();
|
||||||
var options = new Mock<IOptions<LocalizationOptions>>();
|
var options = new Mock<IOptions<LocalizationOptions>>();
|
||||||
options.Setup(o => o.Value).Returns(locOptions);
|
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;
|
var location = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -156,12 +143,10 @@ namespace Microsoft.Extensions.Localization.Tests
|
||||||
public void Create_FromNameLocation_ReturnsNewResultForDifferentName()
|
public void Create_FromNameLocation_ReturnsNewResultForDifferentName()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
|
||||||
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
|
||||||
var locOptions = new LocalizationOptions();
|
var locOptions = new LocalizationOptions();
|
||||||
var options = new Mock<IOptions<LocalizationOptions>>();
|
var options = new Mock<IOptions<LocalizationOptions>>();
|
||||||
options.Setup(o => o.Value).Returns(locOptions);
|
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;
|
var location = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -176,12 +161,10 @@ namespace Microsoft.Extensions.Localization.Tests
|
||||||
public void Create_FromNameLocation_ReturnsNewResultForDifferentLocation()
|
public void Create_FromNameLocation_ReturnsNewResultForDifferentLocation()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
|
||||||
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
|
||||||
var locOptions = new LocalizationOptions();
|
var locOptions = new LocalizationOptions();
|
||||||
var options = new Mock<IOptions<LocalizationOptions>>();
|
var options = new Mock<IOptions<LocalizationOptions>>();
|
||||||
options.Setup(o => o.Value).Returns(locOptions);
|
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 location1 = new AssemblyName(typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName).Name;
|
||||||
var location2 = new AssemblyName(typeof(ResourceManagerStringLocalizerFactoryTest).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()
|
public void Create_FromNameLocation_ResourcesPathDirectorySeparatorToDot()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
|
||||||
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("Microsoft.Extensions.Localization.Tests");
|
|
||||||
var locOptions = new LocalizationOptions();
|
var locOptions = new LocalizationOptions();
|
||||||
locOptions.ResourcesPath = Path.Combine("My", "Resources");
|
locOptions.ResourcesPath = Path.Combine("My", "Resources");
|
||||||
var options = new Mock<IOptions<LocalizationOptions>>();
|
var options = new Mock<IOptions<LocalizationOptions>>();
|
||||||
options.Setup(o => o.Value).Returns(locOptions);
|
options.Setup(o => o.Value).Returns(locOptions);
|
||||||
var factory = new TestResourceManagerStringLocalizerFactory(
|
var factory = new TestResourceManagerStringLocalizerFactory(
|
||||||
hostingEnvironment.Object,
|
|
||||||
options.Object,
|
options.Object,
|
||||||
resourceLocationAttribute: null);
|
resourceLocationAttribute: null);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result1 = factory.Create("baseName", location: null);
|
var result1 = factory.Create("baseName", location: "Microsoft.Extensions.Localization.Tests");
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal("Microsoft.Extensions.Localization.Tests.My.Resources.baseName", factory.BaseName);
|
Assert.Equal("Microsoft.Extensions.Localization.Tests.My.Resources.baseName", factory.BaseName);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Create_FromNameLocation_NullLocationUsesApplicationPath()
|
public void Create_FromNameLocation_NullLocationThrows()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
|
||||||
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("Microsoft.Extensions.Localization.Tests");
|
|
||||||
var locOptions = new LocalizationOptions();
|
var locOptions = new LocalizationOptions();
|
||||||
var options = new Mock<IOptions<LocalizationOptions>>();
|
var options = new Mock<IOptions<LocalizationOptions>>();
|
||||||
options.Setup(o => o.Value).Returns(locOptions);
|
options.Setup(o => o.Value).Returns(locOptions);
|
||||||
var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object);
|
var factory = new ResourceManagerStringLocalizerFactory(localizationOptions: options.Object);
|
||||||
|
|
||||||
// Act
|
// Act & Assert
|
||||||
var result1 = factory.Create("baseName", location: null);
|
Assert.Throws<ArgumentNullException>(() => factory.Create("baseName", location: null));
|
||||||
var result2 = factory.Create("baseName", location: null);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
Assert.Same(result1, result2);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue