using System; using System.Collections.Concurrent; using System.Linq; namespace MediaBrowser.Server.Implementations.Persistence { /// /// Class TypeMapper /// public class TypeMapper { /// /// This holds all the types in the running assemblies so that we can de-serialize properly when we don't have strong types /// private readonly ConcurrentDictionary _typeMap = new ConcurrentDictionary(); /// /// Gets the type. /// /// Name of the type. /// Type. /// public Type GetType(string typeName) { if (string.IsNullOrEmpty(typeName)) { throw new ArgumentNullException(); } return _typeMap.GetOrAdd(typeName, LookupType); } /// /// Lookups the type. /// /// Name of the type. /// Type. private Type LookupType(string typeName) { return AppDomain .CurrentDomain .GetAssemblies() .Select(a => a.GetType(typeName, false)) .FirstOrDefault(t => t != null); } } }