Reacting to Hosting changes

This commit is contained in:
Pranav K 2016-03-15 06:44:45 -07:00
parent dbf16e14c0
commit 90235c7008
3 changed files with 30 additions and 34 deletions

View File

@ -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 + ".");

View File

@ -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-*"

View File

@ -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;