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));
        }