diff --git a/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs index 12d62ead83..dbc9883cd1 100644 --- a/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs +++ b/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs @@ -15,7 +15,7 @@ namespace Microsoft.AspNet.Localization public class AcceptLanguageHeaderRequestCultureStrategy : RequestCultureStrategy { /// - /// The maximum number of values in the Accept-Language header to attempt to create a + /// The maximum number of values in the Accept-Language header to attempt to create a /// from for the current request. /// Defaults to 3. /// @@ -52,7 +52,7 @@ namespace Microsoft.AspNet.Localization var culture = CultureInfoCache.GetCultureInfo(language.Value); if (culture != null) { - var requestCulture = RequestCulture.GetRequestCulture(culture); + var requestCulture = new RequestCulture(culture); requestCulture = ValidateRequestCulture(requestCulture); diff --git a/src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs index ead04c8320..97c70d82ed 100644 --- a/src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs +++ b/src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs @@ -98,7 +98,7 @@ namespace Microsoft.AspNet.Localization return null; } - return RequestCulture.GetRequestCulture(culture, uiCulture); + return new RequestCulture(culture, uiCulture); } } } diff --git a/src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs index 19c3c077b6..64a5a3b520 100644 --- a/src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs +++ b/src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs @@ -67,7 +67,7 @@ namespace Microsoft.AspNet.Localization return null; } - var requestCulture = RequestCulture.GetRequestCulture(culture, uiCulture); + var requestCulture = new RequestCulture(culture, uiCulture); requestCulture = ValidateRequestCulture(requestCulture); diff --git a/src/Microsoft.AspNet.Localization/RequestCulture.cs b/src/Microsoft.AspNet.Localization/RequestCulture.cs index 9f0e2754db..ec109e6d8e 100644 --- a/src/Microsoft.AspNet.Localization/RequestCulture.cs +++ b/src/Microsoft.AspNet.Localization/RequestCulture.cs @@ -1,7 +1,6 @@ // 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.Collections.Concurrent; using System.Globalization; using Microsoft.Framework.Internal; @@ -12,15 +11,24 @@ namespace Microsoft.AspNet.Localization /// public class RequestCulture { - private static readonly ConcurrentDictionary _cache = new ConcurrentDictionary(); - - private RequestCulture([NotNull] CultureInfo culture) + /// + /// Creates a new object has its and + /// properties set to the same value. + /// + /// The for the request. + public RequestCulture([NotNull] CultureInfo culture) : this (culture, culture) { } - private RequestCulture([NotNull] CultureInfo culture, [NotNull] CultureInfo uiCulture) + /// + /// Creates a new object has its and + /// properties set to the respective values provided. + /// + /// The for the request to be used for formatting. + /// The for the request to be used for text, i.e. language. + public RequestCulture([NotNull] CultureInfo culture, [NotNull] CultureInfo uiCulture) { Culture = culture; UICulture = uiCulture; @@ -35,66 +43,5 @@ namespace Microsoft.AspNet.Localization /// Gets the for the request to be used for text, i.e. language; /// public CultureInfo UICulture { get; } - - /// - /// Gets a cached instance that has its and - /// properties set to the same value. - /// - /// The for the request. - public static RequestCulture GetRequestCulture([NotNull] CultureInfo culture) - { - return GetRequestCulture(culture, culture); - } - - /// - /// Gets a cached instance that has its and - /// properties set to the respective values provided. - /// - /// The for the request to be used for formatting. - /// The for the request to be used for text, i.e. language. - /// - public static RequestCulture GetRequestCulture([NotNull] CultureInfo culture, [NotNull] CultureInfo uiCulture) - { - var key = new CacheKey(culture, uiCulture); - return _cache.GetOrAdd(key, k => new RequestCulture(culture, uiCulture)); - } - - private class CacheKey - { - private readonly int _hashCode; - - public CacheKey(CultureInfo culture, CultureInfo uiCulture) - { - Culture = culture; - UICulture = uiCulture; - _hashCode = new { Culture, UICulture }.GetHashCode(); - } - - public CultureInfo Culture { get; } - - public CultureInfo UICulture { get; } - - public bool Equals(CacheKey other) - { - return Culture == other.Culture && UICulture == other.UICulture; - } - - public override bool Equals(object obj) - { - var other = obj as CacheKey; - - if (other != null) - { - return Equals(other); - } - - return base.Equals(obj); - } - - public override int GetHashCode() - { - return _hashCode; - } - } } } diff --git a/src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs index 422f5d6f9e..17afbcd397 100644 --- a/src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs +++ b/src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs @@ -41,12 +41,12 @@ namespace Microsoft.AspNet.Localization if (Options.SupportedCultures != null && !Options.SupportedCultures.Contains(result.Culture)) { - result = RequestCulture.GetRequestCulture(Options.DefaultRequestCulture.Culture, result.UICulture); + result = new RequestCulture(Options.DefaultRequestCulture.Culture, result.UICulture); } if (Options.SupportedUICultures != null && !Options.SupportedUICultures.Contains(result.UICulture)) { - result = RequestCulture.GetRequestCulture(result.Culture, Options.DefaultRequestCulture.UICulture); + result = new RequestCulture(result.Culture, Options.DefaultRequestCulture.UICulture); } if (requestCulture.Culture != result.Culture && requestCulture.UICulture != result.UICulture) diff --git a/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs b/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs index 2ccfe10418..c640fcbb8f 100644 --- a/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs +++ b/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs @@ -38,7 +38,7 @@ namespace Microsoft.AspNet.Localization public async Task Invoke([NotNull] HttpContext context) { var requestCulture = _options.DefaultRequestCulture ?? - RequestCulture.GetRequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture); + new RequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture); IRequestCultureStrategy winningStrategy = null; diff --git a/src/Microsoft.AspNet.Localization/RequestLocalizationOptions.cs b/src/Microsoft.AspNet.Localization/RequestLocalizationOptions.cs index 5279c98d8e..74eb335921 100644 --- a/src/Microsoft.AspNet.Localization/RequestLocalizationOptions.cs +++ b/src/Microsoft.AspNet.Localization/RequestLocalizationOptions.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNet.Localization /// public RequestLocalizationOptions() { - DefaultRequestCulture = RequestCulture.GetRequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture); + DefaultRequestCulture = new RequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture); RequestCultureStrategies = new List {