aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Reflection/TypeMapper.cs
diff options
context:
space:
mode:
authorEric Reed <ebr@mediabrowser3.com>2013-06-18 15:28:18 -0400
committerEric Reed <ebr@mediabrowser3.com>2013-06-18 15:28:18 -0400
commitcc728d87c2507d5392686df6e18c7ad2ba5c45bd (patch)
tree1eee3719a4cd8abd78f422900620e62042161766 /MediaBrowser.Controller/Reflection/TypeMapper.cs
parent90155278f8b4465a4b5eaf140c5e6e4905cc8dcf (diff)
parent5d8ed2c16fdeaec1344964778e98cadfaa9571b4 (diff)
Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
Diffstat (limited to 'MediaBrowser.Controller/Reflection/TypeMapper.cs')
-rw-r--r--MediaBrowser.Controller/Reflection/TypeMapper.cs47
1 files changed, 47 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Reflection/TypeMapper.cs b/MediaBrowser.Controller/Reflection/TypeMapper.cs
new file mode 100644
index 000000000..d968a3b42
--- /dev/null
+++ b/MediaBrowser.Controller/Reflection/TypeMapper.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Concurrent;
+using System.Linq;
+
+namespace MediaBrowser.Controller.Reflection
+{
+ /// <summary>
+ /// Class TypeMapper
+ /// </summary>
+ public class TypeMapper
+ {
+ /// <summary>
+ /// This holds all the types in the running assemblies so that we can de-serialize properly when we don't have strong types
+ /// </summary>
+ private readonly ConcurrentDictionary<string, Type> _typeMap = new ConcurrentDictionary<string, Type>();
+
+ /// <summary>
+ /// Gets the type.
+ /// </summary>
+ /// <param name="typeName">Name of the type.</param>
+ /// <returns>Type.</returns>
+ /// <exception cref="System.ArgumentNullException"></exception>
+ public Type GetType(string typeName)
+ {
+ if (string.IsNullOrEmpty(typeName))
+ {
+ throw new ArgumentNullException();
+ }
+
+ return _typeMap.GetOrAdd(typeName, LookupType);
+ }
+
+ /// <summary>
+ /// Lookups the type.
+ /// </summary>
+ /// <param name="typeName">Name of the type.</param>
+ /// <returns>Type.</returns>
+ private Type LookupType(string typeName)
+ {
+ return AppDomain
+ .CurrentDomain
+ .GetAssemblies()
+ .Select(a => a.GetType(typeName, false))
+ .FirstOrDefault(t => t != null);
+ }
+ }
+}