public static IDictionary<string, ModelMetadataItem> RegisterExtendedModelMetadata(
            Type modelType,
            ExtendedModelMetadataProvider metadataProvider,
            IModelMetadataRegistry extMetadataRegistry)
        {
            var modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(
                () => Activator.CreateInstance(modelType),
                modelType);

            var extModelMetadataItem = CreateModelMetadataItem(modelMetadata, modelType.GetCustomAttributes());
            var extModelMetadataProperties = new Dictionary<string, ModelMetadataItem>();
            var modelTypeProperties = modelType.GetProperties();
            foreach (var property in modelMetadata.Properties)
            {
                var modelProperty = modelTypeProperties.Single(p => p.Name == property.PropertyName);
                extModelMetadataProperties.Add(property.PropertyName, CreateModelMetadataItem(property, modelProperty.GetCustomAttributes()));
            }

            extMetadataRegistry.RegisterModel(modelType, extModelMetadataItem);
            extMetadataRegistry.RegisterModelProperties(modelType, extModelMetadataProperties);

            return extMetadataRegistry.GetModelPropertiesMetadata(modelType);
        }