public void RegisterSubclass(Type type) { TypeInfo typeInfo = type.GetTypeInfo(); if (!typeof(PlaySynchronousObject).GetTypeInfo().IsAssignableFrom(typeInfo)) { throw new ArgumentException("Cannot register a type that is not a implementation of PlaySynchronousObject"); } var className = GetClassName(type); try { mutex.EnterWriteLock(); ConstructorInfo constructor = type.FindConstructor(); if (constructor == null) { throw new ArgumentException("Cannot register a type that does not implement the default constructor!"); } var classInfo = new PlaySynchronousObjectSubclassInfo(type, constructor); registeredySynchronousObjects[className] = classInfo; } finally { mutex.ExitWriteLock(); } }
public IDictionary <String, String> GetPropertyMappings(String className) { PlaySynchronousObjectSubclassInfo info = null; mutex.EnterReadLock(); registeredySynchronousObjects.TryGetValue(className, out info); if (info == null) { registeredySynchronousObjects.TryGetValue("PlaySynchronousObject", out info); } mutex.ExitReadLock(); return(info.PropertyMappings); }
public String GetClassName(Type type) { return(type == typeof(PlaySynchronousObject) ? "PlaySynchronousObject" : PlaySynchronousObjectSubclassInfo.GetSynchronousObjectClassName(type.GetTypeInfo())); }