Reacting to Hosting changes
This commit is contained in:
parent
dbf16e14c0
commit
90235c7008
|
|
@ -6,8 +6,8 @@ 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;
|
||||||
using Microsoft.Extensions.PlatformAbstractions;
|
|
||||||
|
|
||||||
namespace Microsoft.Extensions.Localization
|
namespace Microsoft.Extensions.Localization
|
||||||
{
|
{
|
||||||
|
|
@ -19,21 +19,21 @@ 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 IApplicationEnvironment _applicationEnvironment;
|
private readonly IHostingEnvironment _hostingEnvironment;
|
||||||
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="applicationEnvironment">The <see cref="IApplicationEnvironment"/>.</param>
|
/// <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(
|
||||||
IApplicationEnvironment applicationEnvironment,
|
IHostingEnvironment hostingEnvironment,
|
||||||
IOptions<LocalizationOptions> localizationOptions)
|
IOptions<LocalizationOptions> localizationOptions)
|
||||||
{
|
{
|
||||||
if (applicationEnvironment == null)
|
if (hostingEnvironment == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(applicationEnvironment));
|
throw new ArgumentNullException(nameof(hostingEnvironment));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (localizationOptions == null)
|
if (localizationOptions == null)
|
||||||
|
|
@ -41,7 +41,7 @@ namespace Microsoft.Extensions.Localization
|
||||||
throw new ArgumentNullException(nameof(localizationOptions));
|
throw new ArgumentNullException(nameof(localizationOptions));
|
||||||
}
|
}
|
||||||
|
|
||||||
_applicationEnvironment = applicationEnvironment;
|
_hostingEnvironment = hostingEnvironment;
|
||||||
_resourcesRelativePath = localizationOptions.Value.ResourcesPath ?? string.Empty;
|
_resourcesRelativePath = localizationOptions.Value.ResourcesPath ?? string.Empty;
|
||||||
if (!string.IsNullOrEmpty(_resourcesRelativePath))
|
if (!string.IsNullOrEmpty(_resourcesRelativePath))
|
||||||
{
|
{
|
||||||
|
|
@ -69,8 +69,8 @@ namespace Microsoft.Extensions.Localization
|
||||||
// Re-root the base name if a resources path is set
|
// Re-root the base name if a resources path is set
|
||||||
var baseName = string.IsNullOrEmpty(_resourcesRelativePath)
|
var baseName = string.IsNullOrEmpty(_resourcesRelativePath)
|
||||||
? typeInfo.FullName
|
? typeInfo.FullName
|
||||||
: _applicationEnvironment.ApplicationName + "." + _resourcesRelativePath
|
: _hostingEnvironment.ApplicationName + "." + _resourcesRelativePath
|
||||||
+ TrimPrefix(typeInfo.FullName, _applicationEnvironment.ApplicationName + ".");
|
+ TrimPrefix(typeInfo.FullName, _hostingEnvironment.ApplicationName + ".");
|
||||||
|
|
||||||
return _localizerCache.GetOrAdd(baseName, _ =>
|
return _localizerCache.GetOrAdd(baseName, _ =>
|
||||||
new ResourceManagerStringLocalizer(
|
new ResourceManagerStringLocalizer(
|
||||||
|
|
@ -94,7 +94,7 @@ namespace Microsoft.Extensions.Localization
|
||||||
throw new ArgumentNullException(nameof(baseName));
|
throw new ArgumentNullException(nameof(baseName));
|
||||||
}
|
}
|
||||||
|
|
||||||
location = location ?? _applicationEnvironment.ApplicationName;
|
location = location ?? _hostingEnvironment.ApplicationName;
|
||||||
|
|
||||||
baseName = location + "." + _resourcesRelativePath + TrimPrefix(baseName, location + ".");
|
baseName = location + "." + _resourcesRelativePath + TrimPrefix(baseName, location + ".");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
"xmlDoc": true
|
"xmlDoc": true
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Microsoft.Extensions.PlatformAbstractions": "1.0.0-*",
|
"Microsoft.AspNetCore.Hosting.Abstractions": "1.0.0-*",
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-*",
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-*",
|
||||||
"Microsoft.Extensions.Localization.Abstractions": "1.0.0-*",
|
"Microsoft.Extensions.Localization.Abstractions": "1.0.0-*",
|
||||||
"Microsoft.Extensions.Options": "1.0.0-*"
|
"Microsoft.Extensions.Options": "1.0.0-*"
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,11 @@
|
||||||
// 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.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Xunit;
|
|
||||||
using Moq;
|
|
||||||
using Microsoft.Extensions.PlatformAbstractions;
|
|
||||||
using Microsoft.Extensions.Options;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using Moq;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.Extensions.Localization.Test
|
namespace Microsoft.Extensions.Localization.Test
|
||||||
{
|
{
|
||||||
|
|
@ -19,12 +15,12 @@ namespace Microsoft.Extensions.Localization.Test
|
||||||
public void Create_FromType_ReturnsCachedResultForSameType()
|
public void Create_FromType_ReturnsCachedResultForSameType()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var appEnv = new Mock<IApplicationEnvironment>();
|
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
||||||
appEnv.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
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(appEnv.Object, localizationOptions: options.Object);
|
var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest));
|
var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest));
|
||||||
|
|
@ -38,12 +34,12 @@ namespace Microsoft.Extensions.Localization.Test
|
||||||
public void Create_FromType_ReturnsNewResultForDifferentType()
|
public void Create_FromType_ReturnsNewResultForDifferentType()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var appEnv = new Mock<IApplicationEnvironment>();
|
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
||||||
appEnv.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
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(appEnv.Object, localizationOptions: options.Object);
|
var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest));
|
var result1 = factory.Create(typeof(ResourceManagerStringLocalizerFactoryTest));
|
||||||
|
|
@ -57,12 +53,12 @@ namespace Microsoft.Extensions.Localization.Test
|
||||||
public void Create_FromNameLocation_ReturnsCachedResultForSameNameLocation()
|
public void Create_FromNameLocation_ReturnsCachedResultForSameNameLocation()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var appEnv = new Mock<IApplicationEnvironment>();
|
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
||||||
appEnv.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
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(appEnv.Object, localizationOptions: options.Object);
|
var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object);
|
||||||
var location = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName;
|
var location = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -77,12 +73,12 @@ namespace Microsoft.Extensions.Localization.Test
|
||||||
public void Create_FromNameLocation_ReturnsNewResultForDifferentName()
|
public void Create_FromNameLocation_ReturnsNewResultForDifferentName()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var appEnv = new Mock<IApplicationEnvironment>();
|
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
||||||
appEnv.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
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(appEnv.Object, localizationOptions: options.Object);
|
var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object);
|
||||||
var location = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName;
|
var location = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName;
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -97,12 +93,12 @@ namespace Microsoft.Extensions.Localization.Test
|
||||||
public void Create_FromNameLocation_ReturnsNewResultForDifferentLocation()
|
public void Create_FromNameLocation_ReturnsNewResultForDifferentLocation()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var appEnv = new Mock<IApplicationEnvironment>();
|
var hostingEnvironment = new Mock<IHostingEnvironment>();
|
||||||
appEnv.SetupGet(a => a.ApplicationName).Returns("TestApplication");
|
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(appEnv.Object, localizationOptions: options.Object);
|
var factory = new ResourceManagerStringLocalizerFactory(hostingEnvironment.Object, localizationOptions: options.Object);
|
||||||
var location1 = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName;
|
var location1 = typeof(ResourceManagerStringLocalizer).GetTypeInfo().Assembly.FullName;
|
||||||
var location2 = typeof(ResourceManagerStringLocalizerFactoryTest).GetTypeInfo().Assembly.FullName;
|
var location2 = typeof(ResourceManagerStringLocalizerFactoryTest).GetTypeInfo().Assembly.FullName;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue