/// <summary>
        /// Registers the default adapter type for objects which implement
        /// <see cref="IValidatableObject"/>. The adapter type must derive from
        /// <see cref="ModelValidator"/> and it must contain a public constructor
        /// which takes two parameters of types <see cref="ModelMetadata"/> and
        /// <see cref="HttpActionContext"/>.
        /// </summary>
        public void RegisterDefaultValidatableObjectAdapter(Type adapterType)
        {
            ValidateValidatableAdapterType(adapterType);
            ConstructorInfo constructor = GetValidatableAdapterConstructor(adapterType);

            DefaultValidatableFactory = context => (ModelValidator)constructor.Invoke(new object[] { context });
        }
 private static void ValidateValidatableFactory(DataAnnotationsValidatableObjectAdapterFactory factory)
 {
     if (factory == null)
     {
         throw Error.ArgumentNull("factory");
     }
 }
        public void RegisterValidatableObjectAdapterFactoryGuardClauses()
        {
            var provider = new DataAnnotationsModelValidatorProvider();
            DataAnnotationsValidatableObjectAdapterFactory factory = (context) => null;

            // Attribute type cannot be null
            Assert.ThrowsArgumentNull(
                () => provider.RegisterValidatableObjectAdapterFactory(null, factory),
                "modelType"
                );

            // Factory cannot be null
            Assert.ThrowsArgumentNull(
                () =>
                provider.RegisterValidatableObjectAdapterFactory(
                    typeof(MyValidatableClass),
                    null
                    ),
                "factory"
                );

            // Validation attribute must derive from ValidationAttribute
            Assert.ThrowsArgument(
                () => provider.RegisterValidatableObjectAdapterFactory(typeof(object), factory),
                "modelType",
                "The type Object must derive from IValidatableObject"
                );
        }
        /// <summary>
        /// Registers an adapter factory for the given <paramref name="modelType"/>, which must
        /// implement <see cref="IValidatableObject"/>.
        /// </summary>
        public void RegisterValidatableObjectAdapterFactory(Type modelType, DataAnnotationsValidatableObjectAdapterFactory factory)
        {
            ValidateValidatableModelType(modelType);
            ValidateValidatableFactory(factory);

            ValidatableFactories[modelType] = factory;
        }
예제 #5
0
 static void ValidateValidatableFactory(DataAnnotationsValidatableObjectAdapterFactory factory)
 {
     if (factory is null)
     {
         throw new ArgumentNullException(nameof(factory));
     }
 }
        public void RegisterDefaultValidatableObjectAdapterFactory()
        {
            var oldFactory = DataAnnotationsModelValidatorProvider.DefaultValidatableFactory;

            try
            {
                // Arrange
                var metadata = ModelMetadataProviders.Current.GetMetadataForType(
                    () => null,
                    typeof(MyValidatableClass)
                    );
                var            context   = new ControllerContext();
                ModelValidator validator = new Mock <ModelValidator>(metadata, context).Object;
                DataAnnotationsValidatableObjectAdapterFactory factory = delegate
                {
                    return(validator);
                };
                DataAnnotationsModelValidatorProvider.RegisterDefaultValidatableObjectAdapterFactory(
                    factory
                    );

                // Act
                var result = new DataAnnotationsModelValidatorProvider()
                             .GetValidators(metadata, context)
                             .Single();

                // Assert
                Assert.Same(validator, result);
            }
            finally
            {
                DataAnnotationsModelValidatorProvider.DefaultValidatableFactory = oldFactory;
            }
        }
        public void RegisterValidatableObjectAdapterFactoryGuardClauses()
        {
            DataAnnotationsValidatableObjectAdapterFactory factory = (metadata, context) => null;

            // Attribute type cannot be null
            Assert.ThrowsArgumentNull(
                () =>
                DataAnnotationsModelValidatorProvider.RegisterValidatableObjectAdapterFactory(
                    null,
                    factory
                    ),
                "modelType"
                );

            // Factory cannot be null
            Assert.ThrowsArgumentNull(
                () =>
                DataAnnotationsModelValidatorProvider.RegisterValidatableObjectAdapterFactory(
                    typeof(MyValidatableClass),
                    null
                    ),
                "factory"
                );

            // Validation attribute must derive from ValidationAttribute
            Assert.Throws <ArgumentException>(
                () =>
                DataAnnotationsModelValidatorProvider.RegisterValidatableObjectAdapterFactory(
                    typeof(object),
                    factory
                    ),
                "The type System.Object must derive from System.ComponentModel.DataAnnotations.IValidatableObject\r\nParameter name: modelType"
                );
        }
        public void RegisterValidatableObjectAdapterFactory()
        {
            var oldFactories = DataAnnotationsModelValidatorProvider.ValidatableFactories;

            try
            {
                // Arrange
                DataAnnotationsModelValidatorProvider.ValidatableFactories =
                    new Dictionary <Type, DataAnnotationsValidatableObjectAdapterFactory>();
                DataAnnotationsValidatableObjectAdapterFactory factory = delegate
                {
                    return(null);
                };

                // Act
                DataAnnotationsModelValidatorProvider.RegisterValidatableObjectAdapterFactory(
                    typeof(MyValidatableClass),
                    factory
                    );

                // Assert
                var type = DataAnnotationsModelValidatorProvider.ValidatableFactories.Keys.Single();
                Assert.Equal(typeof(MyValidatableClass), type);
                Assert.Same(
                    factory,
                    DataAnnotationsModelValidatorProvider.ValidatableFactories.Values.Single()
                    );
            }
            finally
            {
                DataAnnotationsModelValidatorProvider.ValidatableFactories = oldFactories;
            }
        }
        /// <summary>
        /// Registers the default adapter factory for objects which implement
        /// <see cref="IValidatableObject"/>.
        /// </summary>
        public static void RegisterDefaultValidatableObjectAdapterFactory(
            DataAnnotationsValidatableObjectAdapterFactory factory
            )
        {
            ValidateValidatableFactory(factory);

            DefaultValidatableFactory = factory;
        }
예제 #10
0
        /// <summary>
        /// Registers an adapter factory for the given <paramref name="modelType"/>, which must
        /// implement <see cref="IValidatableObject"/>.
        /// </summary>
        public static void RegisterValidatableObjectAdapterFactory(Type modelType, DataAnnotationsValidatableObjectAdapterFactory factory)
        {
            ValidateValidatableModelType(modelType);
            ValidateValidatableFactory(factory);

            _adaptersLock.EnterWriteLock();

            try {
                ValidatableFactories[modelType] = factory;
            } finally {
                _adaptersLock.ExitWriteLock();
            }
        }
        public void RegisterDefaultValidatableObjectAdapterFactory()
        {
            // Arrange
            var            provider  = new DataAnnotationsModelValidatorProvider();
            var            metadata  = _metadataProvider.GetMetadataForType(() => null, typeof(MyValidatableClass));
            ModelValidator validator = new Mock <ModelValidator>(metadata, _noValidatorProviders).Object;
            DataAnnotationsValidatableObjectAdapterFactory factory = delegate { return(validator); };

            provider.RegisterDefaultValidatableObjectAdapterFactory(factory);

            // Act
            var result = provider.GetValidators(metadata, _noValidatorProviders).Single();

            // Assert
            Assert.Same(validator, result);
        }
 private static void ValidateValidatableFactory(DataAnnotationsValidatableObjectAdapterFactory factory) {
     if (factory == null) {
         throw new ArgumentNullException("factory");
     }
 }
        /// <summary>
        /// Registers the default adapter factory for objects which implement
        /// <see cref="IValidatableObject"/>.
        /// </summary>
        public static void RegisterDefaultValidatableObjectAdapterFactory(DataAnnotationsValidatableObjectAdapterFactory factory) {
            ValidateValidatableFactory(factory);

            DefaultValidatableFactory = factory;
        }
        /// <summary>
        /// Registers the default adapter type for objects which implement
        /// <see cref="IValidatableObject"/>. The adapter type must derive from
        /// <see cref="ModelValidator"/> and it must contain a public constructor
        /// which takes two parameters of types <see cref="ModelMetadata"/> and
        /// <see cref="ControllerContext"/>.
        /// </summary>
        public static void RegisterDefaultValidatableObjectAdapter(Type adapterType) {
            ValidateValidatableAdapterType(adapterType);
            ConstructorInfo constructor = GetValidatableAdapterConstructor(adapterType);

            DefaultValidatableFactory = (metadata, context) => (ModelValidator)constructor.Invoke(new object[] { metadata, context });
        }
        /// <summary>
        /// Registers an adapter factory for the given <see cref="modelType"/>, which must
        /// implement <see cref="IValidatableObject"/>.
        /// </summary>
        public static void RegisterValidatableObjectAdapterFactory(Type modelType, DataAnnotationsValidatableObjectAdapterFactory factory) {
            ValidateValidatableModelType(modelType);
            ValidateValidatableFactory(factory);

            _adaptersLock.EnterWriteLock();

            try {
                ValidatableFactories[modelType] = factory;
            }
            finally {
                _adaptersLock.ExitWriteLock();
            }
        }
        /// <summary>
        /// Registers an adapter factory for the given <paramref name="modelType"/>, which must
        /// implement <see cref="IValidatableObject"/>.
        /// </summary>
        public void RegisterValidatableObjectAdapterFactory(Type modelType, DataAnnotationsValidatableObjectAdapterFactory factory)
        {
            ValidateValidatableModelType(modelType);
            ValidateValidatableFactory(factory);

                ValidatableFactories[modelType] = factory;
            }