From bdab0a1588fa4347d168c69f803a13cf607b4166 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 19 Nov 2016 11:51:49 -0500 Subject: move TypeMapper to portable project --- Emby.Server.Implementations/Data/TypeMapper.cs | 54 ++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Emby.Server.Implementations/Data/TypeMapper.cs (limited to 'Emby.Server.Implementations/Data') diff --git a/Emby.Server.Implementations/Data/TypeMapper.cs b/Emby.Server.Implementations/Data/TypeMapper.cs new file mode 100644 index 000000000..f4b37749e --- /dev/null +++ b/Emby.Server.Implementations/Data/TypeMapper.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Concurrent; +using MediaBrowser.Model.Reflection; +using System.Linq; + +namespace Emby.Server.Implementations.Data +{ + /// + /// Class TypeMapper + /// + public class TypeMapper + { + private readonly IAssemblyInfo _assemblyInfo; + + /// + /// 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(); + + public TypeMapper(IAssemblyInfo assemblyInfo) + { + _assemblyInfo = assemblyInfo; + } + + /// + /// Gets the type. + /// + /// Name of the type. + /// Type. + /// + public Type GetType(string typeName) + { + if (string.IsNullOrEmpty(typeName)) + { + throw new ArgumentNullException("typeName"); + } + + return _typeMap.GetOrAdd(typeName, LookupType); + } + + /// + /// Lookups the type. + /// + /// Name of the type. + /// Type. + private Type LookupType(string typeName) + { + return _assemblyInfo + .GetCurrentAssemblies() + .Select(a => a.GetType(typeName)) + .FirstOrDefault(t => t != null); + } + } +} -- cgit v1.2.3