예제 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ModelMetadata"/> class. 
        /// </summary>
        /// <param name="provider">The provider.</param>
        /// <param name="containerType">The type of the container.</param>
        /// <param name="modelAccessor">The model accessor.</param>
        /// <param name="modelType">The type of the model.</param>
        /// <param name="propertyName">The name of the property.</param>
        public ModelMetadata(ModelMetadataProvider provider, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
        {
            if (provider == null)
            {
                throw Error.ArgumentNull("provider");
            }

            if (modelType == null)
            {
                throw Error.ArgumentNull("modelType");
            }

            this.Provider = provider;

            this.containerType = containerType;
            this.modelAccessor = modelAccessor;
            this.modelType = modelType;
            this.propertyName = propertyName;
        }
예제 #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ModelMetadata"/> class.
        /// </summary>
        /// <param name="provider">The provider.</param>
        /// <param name="containerType">The type of the container.</param>
        /// <param name="modelAccessor">The model accessor.</param>
        /// <param name="modelType">The type of the model.</param>
        /// <param name="propertyName">The name of the property.</param>
        public ModelMetadata(ModelMetadataProvider provider, Type containerType, Func <object> modelAccessor, Type modelType, string propertyName)
        {
            if (provider == null)
            {
                throw Error.ArgumentNull("provider");
            }

            if (modelType == null)
            {
                throw Error.ArgumentNull("modelType");
            }

            this.Provider = provider;

            this.containerType = containerType;
            this.modelAccessor = modelAccessor;
            this.modelType     = modelType;
            this.propertyName  = propertyName;
        }
예제 #3
0
        /// <summary>
        /// Flatten the <paramref name="model"/>.
        /// Properties are stored into a dictionary.
        /// Property name is used as key. Properties in a submodel are separated with a period. 
        /// <see cref="Enumerable"/> properties are keyed with square brackets.
        /// </summary>
        /// <example>
        /// <list type="bullet">
        /// <item>Property1</item>
        /// <item>Property2</item>
        /// <item>Property3.SubProperty1</item>
        /// <item>Property3.SubProperty2</item>
        /// <item>Property4[0].Item</item>
        /// <item>Property4[1].Item</item>
        /// <item>...</item>
        /// </list>
        /// </example>
        /// <param name="model">The model to be flattened.</param>
        /// <param name="type">The <see cref="Type"/> to use for flattening.</param>
        /// <param name="metadataProvider">The <see cref="ModelMetadataProvider"/> used to provide the model metadata.</param>
        /// <param name="keyPrefix">The <see cref="string"/> to append to the key for any validation errors.</param>
        /// <returns>The <see cref="ModelDictionary"/>.</returns>
        public ModelDictionary Flatten(object model, Type type, ModelMetadataProvider metadataProvider, string keyPrefix)
        {
            if (type == null)
            {
                throw Error.ArgumentNull("type");
            }

            if (metadataProvider == null)
            {
                throw Error.ArgumentNull("metadataProvider");
            }

            ModelMetadata metadata = metadataProvider.GetMetadataForType(() => model, type);
            VisitContext visitContext = new VisitContext
                {
                    MetadataProvider = metadataProvider,
                    RootPrefix = keyPrefix
                };
            this.VisitNodeAndChildren(metadata, visitContext);

            return visitContext.FlatCommand;
        }
예제 #4
0
        /// <summary>
        /// Flatten the <paramref name="model"/>.
        /// Properties are stored into a dictionary.
        /// Property name is used as key. Properties in a submodel are separated with a period.
        /// <see cref="Enumerable"/> properties are keyed with square brackets.
        /// </summary>
        /// <example>
        /// <list type="bullet">
        /// <item>Property1</item>
        /// <item>Property2</item>
        /// <item>Property3.SubProperty1</item>
        /// <item>Property3.SubProperty2</item>
        /// <item>Property4[0].Item</item>
        /// <item>Property4[1].Item</item>
        /// <item>...</item>
        /// </list>
        /// </example>
        /// <param name="model">The model to be flattened.</param>
        /// <param name="type">The <see cref="Type"/> to use for flattening.</param>
        /// <param name="metadataProvider">The <see cref="ModelMetadataProvider"/> used to provide the model metadata.</param>
        /// <param name="keyPrefix">The <see cref="string"/> to append to the key for any validation errors.</param>
        /// <returns>The <see cref="ModelDictionary"/>.</returns>
        public ModelDictionary Flatten(object model, Type type, ModelMetadataProvider metadataProvider, string keyPrefix)
        {
            if (type == null)
            {
                throw Error.ArgumentNull("type");
            }

            if (metadataProvider == null)
            {
                throw Error.ArgumentNull("metadataProvider");
            }

            ModelMetadata metadata     = metadataProvider.GetMetadataForType(() => model, type);
            VisitContext  visitContext = new VisitContext
            {
                MetadataProvider = metadataProvider,
                RootPrefix       = keyPrefix
            };

            this.VisitNodeAndChildren(metadata, visitContext);

            return(visitContext.FlatCommand);
        }