Remove dependency on Hosting.Abstractions

This commit is contained in:
Ryan Brandenburg 2017-01-17 11:16:06 -08:00
parent e81627ba02
commit 65e3af98d5
5 changed files with 34 additions and 50 deletions

View File

@ -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<string, ResourceManagerStringLocalizer> _localizerCache =
new ConcurrentDictionary<string, ResourceManagerStringLocalizer>();
private readonly string _applicationName;
private readonly string _resourcesRelativePath;
/// <summary>
/// Creates a new <see cref="ResourceManagerStringLocalizer"/>.
/// </summary>
/// <param name="hostingEnvironment">The <see cref="IHostingEnvironment"/>.</param>
/// <param name="localizationOptions">The <see cref="IOptions{LocalizationOptions}"/>.</param>
public ResourceManagerStringLocalizerFactory(
IHostingEnvironment hostingEnvironment,
IOptions<LocalizationOptions> 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}", _ =>
{

View File

@ -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"
}
]

View File

@ -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"
}
]

View File

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

View File

@ -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> 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<IHostingEnvironment>();
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
var locOptions = new LocalizationOptions();
var options = new Mock<IOptions<LocalizationOptions>>();
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<IHostingEnvironment>();
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
var locOptions = new LocalizationOptions();
var options = new Mock<IOptions<LocalizationOptions>>();
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<IHostingEnvironment>();
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
var locOptions = new LocalizationOptions();
var options = new Mock<IOptions<LocalizationOptions>>();
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<IHostingEnvironment>();
var locOptions = new LocalizationOptions();
locOptions.ResourcesPath = Path.Combine("My", "Resources");
var options = new Mock<IOptions<LocalizationOptions>>();
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<IHostingEnvironment>();
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
var locOptions = new LocalizationOptions();
var options = new Mock<IOptions<LocalizationOptions>>();
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<IHostingEnvironment>();
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
var locOptions = new LocalizationOptions();
var options = new Mock<IOptions<LocalizationOptions>>();
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<IHostingEnvironment>();
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("TestApplication");
var locOptions = new LocalizationOptions();
var options = new Mock<IOptions<LocalizationOptions>>();
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<IHostingEnvironment>();
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("Microsoft.Extensions.Localization.Tests");
var locOptions = new LocalizationOptions();
locOptions.ResourcesPath = Path.Combine("My", "Resources");
var options = new Mock<IOptions<LocalizationOptions>>();
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<IHostingEnvironment>();
hostingEnvironment.SetupGet(a => a.ApplicationName).Returns("Microsoft.Extensions.Localization.Tests");
var locOptions = new LocalizationOptions();
var options = new Mock<IOptions<LocalizationOptions>>();
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<ArgumentNullException>(() => factory.Create("baseName", location: null));
}
}
}