// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; using System.Globalization; namespace System.Web.Mvc { public class DictionaryValueProvider : IValueProvider, IEnumerableValueProvider { private readonly Lazy _prefixContainer; private readonly Dictionary _values = new Dictionary(StringComparer.OrdinalIgnoreCase); public DictionaryValueProvider(IDictionary dictionary, CultureInfo culture) { if (dictionary == null) { throw new ArgumentNullException("dictionary"); } foreach (KeyValuePair entry in dictionary) { object rawValue = entry.Value; string attemptedValue = Convert.ToString(rawValue, culture); _values[entry.Key] = new ValueProviderResult(rawValue, attemptedValue, culture); } _prefixContainer = new Lazy(() => new PrefixContainer(_values.Keys), isThreadSafe: true); } public virtual bool ContainsPrefix(string prefix) { return _prefixContainer.Value.ContainsPrefix(prefix); } public virtual ValueProviderResult GetValue(string key) { if (key == null) { throw new ArgumentNullException("key"); } ValueProviderResult valueProviderResult; _values.TryGetValue(key, out valueProviderResult); return valueProviderResult; } public virtual IDictionary GetKeysFromPrefix(string prefix) { return _prefixContainer.Value.GetKeysFromPrefix(prefix); } } }