internal static RegisteredObject Create <T>(string objectId, T obj) { // Create description var objDesc = ObjectDescriptor.GetObjectDescription <T>(); // Create events var events = new Dictionary <string, RegisteredEvent>(); foreach (var eventInfo in ObjectDescriptor.GetEvents <T>()) { // Create registered event var registeredEvent = RegisteredEvent.Create(objectId, obj, eventInfo); // Store registered event events.Add(eventInfo.Key, registeredEvent); } // Create properties var properties = new Dictionary <string, RegisteredProperty>(); foreach (var propertyInfo in ObjectDescriptor.GetProperties <T>()) { // Create registered property var registeredProperty = RegisteredProperty.Create(objectId, obj, propertyInfo); // Store registered property properties.Add(propertyInfo.Key, registeredProperty); } // Create methods var methods = new Dictionary <string, RegisteredMethod>(); foreach (var methodInfo in ObjectDescriptor.GetMethods <T>()) { // Create registered method var registeredMethod = RegisteredMethod.Create(objectId, obj, methodInfo); // Store registered method methods.Add(methodInfo.Key, registeredMethod); } return(new RegisteredObject(objectId, objDesc, obj, events, properties, methods)); }