From 9afd2c256b83f6acb3ff14fff5e9a776604af819 Mon Sep 17 00:00:00 2001 From: damianedwards Date: Thu, 10 Dec 2015 17:49:44 -0800 Subject: [PATCH] Make ResourceManagerStringLocalizer thread safe now instances are cached & shared --- .../ResourceManagerStringLocalizer.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs b/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs index be93329178..9b646e2cf3 100644 --- a/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs +++ b/src/Microsoft.Extensions.Localization/ResourceManagerStringLocalizer.cs @@ -3,6 +3,7 @@ using System; using System.Collections; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Globalization; using System.Reflection; @@ -15,9 +16,10 @@ namespace Microsoft.Extensions.Localization /// An that uses the and /// to provide localized strings. /// + /// This type is thread-safe. public class ResourceManagerStringLocalizer : IStringLocalizer { - private readonly Dictionary _missingManifestCache = new Dictionary(); + private readonly ConcurrentDictionary _missingManifestCache = new ConcurrentDictionary(); private readonly IResourceNamesCache _resourceNamesCache; private readonly ResourceManager _resourceManager; private readonly AssemblyWrapper _resourceAssemblyWrapper; @@ -185,7 +187,7 @@ namespace Microsoft.Extensions.Localization } catch (MissingManifestResourceException) { - _missingManifestCache.Add(cacheKey, null); + _missingManifestCache.TryAdd(cacheKey, null); return null; } }