Example #1
0
        /// <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)
        {
            GuardValidatableAdapterType(adapterType);
            ConstructorInfo constructor = GetValidatableAdapterConstructor(adapterType);

            DefaultValidatableFactory = (metadata, context) => (ModelValidator)constructor.Invoke(new object[] { metadata, context });
        }
Example #2
0
 private static void GuardValidatableFactory(DataAnnotations4ValidatableObjectAdapterFactory factory)
 {
     if (factory == null)
     {
         throw new ArgumentNullException("factory");
     }
 }
Example #3
0
        /// <summary>
        /// Registers an adapter factory for the given <see cref="modelType"/>, which must
        /// implement <see cref="IValidatableObject"/>.
        /// </summary>
        public static void RegisterValidatableObjectAdapterFactory(Type modelType, DataAnnotations4ValidatableObjectAdapterFactory factory)
        {
            GuardValidatableModelType(modelType);
            GuardValidatableFactory(factory);

            _lockObject.EnterWriteLock();

            try {
                ValidatableFactories[modelType] = factory;
            }
            finally {
                _lockObject.ExitWriteLock();
            }
        }
        public void RegisterValidatableObjectAdapterFactoryGuardClauses()
        {
            DataAnnotations4ValidatableObjectAdapterFactory factory = (metadata, context) => null;

            // Attribute type cannot be null
            ExceptionHelper.ExpectArgumentNullException(
                () => DataAnnotations4ModelValidatorProvider.RegisterValidatableObjectAdapterFactory(null, factory),
                "modelType");

            // Factory cannot be null
            ExceptionHelper.ExpectArgumentNullException(
                () => DataAnnotations4ModelValidatorProvider.RegisterValidatableObjectAdapterFactory(typeof(MyValidatableClass), null),
                "factory");

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

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

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

                // Assert
                var type = DataAnnotations4ModelValidatorProvider.ValidatableFactories.Keys.Single();
                Assert.AreEqual(typeof(MyValidatableClass), type);
                Assert.AreSame(factory, DataAnnotations4ModelValidatorProvider.ValidatableFactories.Values.Single());
            }
            finally {
                DataAnnotations4ModelValidatorProvider.ValidatableFactories = oldFactories;
            }
        }
        public void RegisterDefaultValidatableObjectAdapterFactory()
        {
            var oldFactory = DataAnnotations4ModelValidatorProvider.DefaultValidatableFactory;

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

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

                // Assert
                Assert.AreSame(validator, result);
            }
            finally {
                DataAnnotations4ModelValidatorProvider.DefaultValidatableFactory = oldFactory;
            }
        }
Example #7
0
        /// <summary>
        /// Registers the default adapter factory for objects which implement
        /// <see cref="IValidatableObject"/>.
        /// </summary>
        public static void RegisterDefaultValidatableObjectAdapterFactory(DataAnnotations4ValidatableObjectAdapterFactory factory)
        {
            GuardValidatableFactory(factory);

            DefaultValidatableFactory = factory;
        }
 private static void GuardValidatableFactory(DataAnnotations4ValidatableObjectAdapterFactory 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(DataAnnotations4ValidatableObjectAdapterFactory factory) {
            GuardValidatableFactory(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) {
            GuardValidatableAdapterType(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, DataAnnotations4ValidatableObjectAdapterFactory factory) {
            GuardValidatableModelType(modelType);
            GuardValidatableFactory(factory);

            _lockObject.EnterWriteLock();

            try {
                ValidatableFactories[modelType] = factory;
            }
            finally {
                _lockObject.ExitWriteLock();
            }
        }