コード例 #1
0
 public ValidationTemplate(INotifyPropertyChanged target)
 {
     this.target = target;
     validator = GetValidator(target.GetType());
     validationResult = validator.Validate(target);
     target.PropertyChanged += Validate;
 }
コード例 #2
0
ファイル: Screen.cs プロジェクト: SixtenLabs/Gluten
 public Screen(IModelValidator validator)
     : base(validator)
 {
     var type = GetType();
     DisplayName = type.FullName;
     logger = LogManager.GetLogger(type);
 }
コード例 #3
0
            protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
            {
                var model = base.CreateModel(context, conventionSetBuilder, validator) as Model;

                model["AllYourModelAreBelongTo"] = "Us!";

                return model;
            }
コード例 #4
0
ファイル: SiteController.cs プロジェクト: xwyangjshb/cuyahoga
 public SiteController(ISiteService siteservice, IUserService userService, ITemplateService templateService, INodeService nodeService, IModelValidator<Site> siteValidator, IModelValidator<SiteAlias> siteAliasValidator)
 {
     _siteService = siteservice;
     _userService = userService;
     _templateService = templateService;
     _nodeService = nodeService;
     _siteAliasValidator = siteAliasValidator;
     ModelValidator = siteValidator;
 }
コード例 #5
0
 public PagesController(INodeService nodeService, ITemplateService templateService, IFileService fileService, ISectionService sectionService, IModelValidator<Node> modelValidator, ModuleLoader moduleLoader)
 {
     _nodeService = nodeService;
     _templateService = templateService;
     _fileService = fileService;
     _sectionService = sectionService;
     this.ModelValidator = modelValidator;
     _moduleLoader = moduleLoader;
 }
コード例 #6
0
ファイル: Tests.cs プロジェクト: raulnq/Jal.Validator
        public void SetUp()
        {
            var locator = ServiceLocator.Builder.Create as ServiceLocator;

            locator.Register(typeof(IValidator<Customer>), new CustomerValidator(), typeof(CustomerValidator).FullName);

            var factory = ObjectFactory.Builder.UseLocator(locator).UseConfigurationSource(new IObjectFactoryConfigurationSource[] { new AutoValidationConfigurationSource() }).Create;

            _modelValidator = ModelValidator.Builder.UseFactory(factory).Create;
        }
コード例 #7
0
        protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);
            var model = new Model();
            var modelBuilder = new ModelBuilder(conventionSet, model);

            FindSets(modelBuilder, context);

            _onModelCreating(modelBuilder);

            validator.Validate(model);

            return model;
        }
コード例 #8
0
        protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);

            var modelBuilder = new ModelBuilder(conventionSet);
            var model = (Model)modelBuilder.Model;
            model.SetProductVersion(ProductInfo.GetVersion());

            FindSets(modelBuilder, context);

            _onModelCreating(modelBuilder);

            model.Validate();
            validator.Validate(model);

            return model;
        }
コード例 #9
0
ファイル: Tests.cs プロジェクト: raulnq/Jal.Validator
        public void SetUp()
        {

            var container = new ServiceContainer();

            var directory = TestContext.CurrentContext.TestDirectory;

            var finder = AssemblyFinder.Builder.UsePath(directory).Create;

            var assemblies = finder.GetAssembliesTagged<AssemblyTagAttribute>();

            container.RegisterFrom<ServiceLocatorCompositionRoot>();

            container.RegisterFactory(assemblies);

            container.RegisterValidator(assemblies, assemblies);

            _modelValidator = container.GetInstance<IModelValidator>();
        }
コード例 #10
0
ファイル: Tests.cs プロジェクト: raulnq/Jal.Validator
        public void SetUp()
        {
            var directory = TestContext.CurrentContext.TestDirectory;

            var finder = AssemblyFinder.Builder.UsePath(directory).Create;

            var assemblies = finder.GetAssembliesTagged<AssemblyTagAttribute>();

            IWindsorContainer container = new WindsorContainer();

            container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel));

            container.Install(new ValidatorInstaller(assemblies, assemblies));

            container.Install(new ServiceLocatorInstaller());

            container.Install(new FactoryInstaller(assemblies));

            _modelValidator = container.Resolve<IModelValidator>();
        }
コード例 #11
0
        protected override IModel CreateModel(
            DbContext context,
            IConventionSetBuilder conventionSetBuilder,
            IModelValidator validator)
        {

            var conventionSet = CreateConventionSet(conventionSetBuilder);

            var modelBuilder = new MaterializingModelBuilder(conventionSet);
            var internalModelBuilder = ((IInfrastructure<InternalModelBuilder>)modelBuilder).Instance;

            internalModelBuilder.Metadata.SetProductVersion(ProductInfo.GetVersion());

            FindSets(modelBuilder, context);

            ModelCustomizer.Customize(modelBuilder, context);

            internalModelBuilder.Validate();

            validator.Validate(modelBuilder.Model);

            return modelBuilder.Model;
        }
コード例 #12
0
 public ImportWizardImportContainerViewModel(ILogger <ImportWizardImportContainerViewModel> logger, IDialogCoordinator dialogCoordinator, IModelValidator <ImportWizardImportContainerViewModel> validator, IObjectSelectionProvider objectSelectionProvider, IDiscoveryServices discoveryServices, IDirectory directory, IWindowsServiceProvider windowsServiceProvider, IShellExecuteProvider shellExecuteProvider)
 {
     this.logger                  = logger;
     this.dialogCoordinator       = dialogCoordinator;
     this.discoveryServices       = discoveryServices;
     this.objectSelectionProvider = objectSelectionProvider;
     this.directory               = directory;
     this.Validator               = validator;
     this.windowsServiceProvider  = windowsServiceProvider;
     this.shellExecuteProvider    = shellExecuteProvider;
     this.Initialization          = this.Initialize();
 }
コード例 #13
0
 public SqlServerModelSource([NotNull] IDbSetFinder setFinder, [NotNull] IModelValidator modelValidator)
     : base(setFinder, modelValidator)
 {
 }
コード例 #14
0
 public RenameViewModel(IModelValidator <RenameViewModel> validator, string subject, string currentName) : base(validator)
 {
     Subject     = subject;
     ElementName = currentName;
 }
コード例 #15
0
ファイル: ApiConnection.cs プロジェクト: ziyuejun/SteamTools
 public ApiConnection(ILogger logger, HttpClient client, IApiConnectionPlatformHelper helper, IModelValidator validator)
 {
     this.logger    = logger;
     this.client    = client;
     this.helper    = helper;
     this.validator = validator;
 }
コード例 #16
0
ファイル: BaseController.cs プロジェクト: xwyangjshb/cuyahoga
        /// <summary>
        /// Validates the given object. If invalid, the errors are added to the ModelState.
        /// </summary>
        /// <param name="objectToValidate">The object to validate</param>
        /// <param name="modelValidator">A specific model validator</param>
        /// <param name="includeProperties">Properties to check</param>
        /// <param name="modelPrefix"></param>
        /// <returns>True if the object is valid</returns>
        protected virtual bool ValidateModel(object objectToValidate, IModelValidator modelValidator, string[] includeProperties, string modelPrefix)
        {
            if (modelValidator == null && this._modelValidator == null)
            {
                throw new InvalidOperationException("A call to Validate() was made while there is no IModelValidator available to perform validation.");
            }
            // if a specific modelvalidator is passed, use that one, otherwise use the modelvalidator of the controller.
            IModelValidator modelValidatorToUse = modelValidator ?? this._modelValidator;

            if (!modelValidatorToUse.IsValid(objectToValidate, includeProperties))
            {
                IDictionary<string, ICollection<string>> errorsForProperties = modelValidatorToUse.GetErrors();
                foreach (KeyValuePair<string, ICollection<string>> errorsForProperty in errorsForProperties)
                {
                    string propertyName = errorsForProperty.Key;
                    if (! String.IsNullOrEmpty(modelPrefix))
                    {
                        propertyName = modelPrefix + "." + propertyName;
                    }
                    foreach (string errorMessage in errorsForProperty.Value)
                    {
                        ViewData.ModelState.AddModelError(propertyName, errorMessage);
                    }
                }
                return false;
            }
            return true;
        }
コード例 #17
0
        protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);

            conventionSet.ModelBuiltConventions.Add(new ValidatingConvention(validator));

            var modelBuilder = new ModelBuilder(conventionSet);

            Dependencies.ModelCustomizer.Customize(modelBuilder, context);

            _onModelCreating(modelBuilder, context);

            return(modelBuilder.FinalizeModel());
        }
コード例 #18
0
 protected DialogViewModelBase(IModelValidator validator) : base(validator)
 {
 }
コード例 #19
0
ファイル: MutableObjectModelBinder.cs プロジェクト: Nakro/Mvc
        // Returns true if validator execution adds a model error.
        private static bool RunValidator(IModelValidator validator,
                                         ModelBindingContext bindingContext,
                                         ModelMetadata propertyMetadata,
                                         string modelStateKey)
        {
            var validationContext = new ModelValidationContext(bindingContext, propertyMetadata);

            var addedError = false;
            foreach (var validationResult in validator.Validate(validationContext))
            {
                bindingContext.ModelState.AddModelError(modelStateKey, validationResult.Message);
                addedError = true;
            }

            if (!addedError)
            {
                bindingContext.ModelState.MarkFieldValid(modelStateKey);
            }

            return addedError;
        }
コード例 #20
0
ファイル: ScreenTests.cs プロジェクト: modulexcite/Stylet
 public MyScreen(IModelValidator validator) : base(validator)
 {
 }
コード例 #21
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ValidationCommandHandlerDecorator{TCommand}"/> class.
 /// </summary>
 /// <param name="validator">The validator.</param>
 /// <param name="commandHandler">The command handler.</param>
 public ValidationCommandHandlerDecorator(IModelValidator <TCommand> validator, ICommandHandler <TCommand> commandHandler)
 {
     this.validator      = validator;
     this.commandHandler = commandHandler;
 }
コード例 #22
0
 public ViewModelBase(IModelValidator validator) : base(validator)
 {
     DialogCoordinator = MahApps.Metro.Controls.Dialogs.DialogCoordinator.Instance;
 }
コード例 #23
0
 public AuthenticationValidator(IAuthenticationConfigurationService authenticationConfigurationService, IAuthenticationRepository authenticationRepository, IEncryptionService encryptionService, IModelValidator modelValidator)
 {
     _authenticationConfigurationService = authenticationConfigurationService;
     _authenticationRepository           = authenticationRepository;
     _encryptionService = encryptionService;
     _modelValidator    = modelValidator;
 }
コード例 #24
0
 public DataAnnotationsModelValidator(IModelValidator validator, ValidationAttribute validationAttribute)
 {
     this.validator           = validator;
     this.validationAttribute = validationAttribute;
 }
コード例 #25
0
 public WebhookNotificationChannelDefinitionViewModelFactory(IAppPathProvider appPathProvider, INotificationSubscriptionProvider notificationSubscriptionProvider, IModelValidator <WebhookNotificationChannelDefinitionViewModel> validator)
 {
     this.appPathProvider = appPathProvider;
     this.notificationSubscriptionProvider = notificationSubscriptionProvider;
     this.validator = validator;
 }
コード例 #26
0
 public virtual IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
     => _models.GetOrAdd(context.GetType(), k => CreateModel(context, conventionSetBuilder, validator));
コード例 #27
0
 protected ModelSource([NotNull] IDbSetFinder setFinder, [NotNull] IModelValidator modelValidator)
 {
     SetFinder = setFinder;
     Validator = modelValidator;
 }
コード例 #28
0
 public virtual void SetPropertyPublic(ModelBindingContext bindingContext, ModelMetadata propertyMetadata, ComplexModelDtoResult dtoResult, IModelValidator requiredValidator)
 {
     base.SetProperty(bindingContext, propertyMetadata, dtoResult, requiredValidator);
 }
コード例 #29
0
 public TemplatesController(ITemplateService templateService, IFileService fileService, IModelValidator <Template> modelValidator)
 {
     _templateService = templateService;
     _fileService     = fileService;
     ModelValidator   = modelValidator;
 }
コード例 #30
0
ファイル: BaseController.cs プロジェクト: xwyangjshb/cuyahoga
 /// <summary>
 /// Validates the given object. If invalid, the errors are added to the ModelState.
 /// </summary>
 /// <param name="objectToValidate">The object to validate</param>
 /// <param name="modelValidator">A specific model validator</param>
 /// <param name="includeProperties">Properties to check</param>
 /// <returns>True if the object is valid</returns>
 protected virtual bool ValidateModel(object objectToValidate, IModelValidator modelValidator, string[] includeProperties)
 {
     return ValidateModel(objectToValidate, modelValidator, includeProperties, null);
 }
コード例 #31
0
 public override IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) 
     => _testModelSource.GetModel(context, conventionSetBuilder, validator);
コード例 #32
0
 public ModuleViewModel(IModelValidator <ModuleViewModel> validator, IServiceProvider provider)
     : base(validator)
 {
     _provider = provider;
     Validate();
 }
コード例 #33
0
 public BrandService(ICatalogDbContext catalogDbContext, IModelValidator <Brand> validator)
 {
     _catalogDbContext = catalogDbContext;
     _validator        = validator;
 }
コード例 #34
0
ファイル: AccountController.cs プロジェクト: JoeyCyril/BoC
 public AccountController(IModelValidator modelValidator, IUserService service)
 {
     this.modelValidator = modelValidator;
     this.service = service;
 }
コード例 #35
0
            protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
            {
                var model = base.CreateModel(context, conventionSetBuilder, validator) as Model;

                model["AllYourModelAreBelongTo"] = "Us!";

                return(model);
            }
コード例 #36
0
 /// <summary>
 ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
 ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
 ///     any release. You should only use it directly in your code with extreme caution and knowing that
 ///     doing so can result in application failures when updating to a new Entity Framework Core release.
 /// </summary>
 public ValidatingConvention([NotNull] IModelValidator validator, DiagnosticsLoggers loggers)
 {
     _validator = validator;
     _loggers   = loggers;
 }
コード例 #37
0
 public UserController(ILogger <UserController> logger, IUserRoleRepository userRoleRepository,
                       IUserRepository userRepository, IPractitionerRepository practitionerRepository, ICryptographyHelper cryptographyHelper, IModelValidator <UserModel> validator)
 {
     _logger               = logger;
     _userRoleRepository   = userRoleRepository;
     _userRepository       = userRepository;
     _practionerRepository = practitionerRepository;
     _cryptographyHelper   = cryptographyHelper;
     _validator            = validator;
 }
コード例 #38
0
 public JitGroupMappingViewModel(JitGroupMapping model, ILogger <JitGroupMappingViewModel> logger, IDialogCoordinator dialogCoordinator, IModelValidator <JitGroupMappingViewModel> validator, IDiscoveryServices discoveryServices, IObjectSelectionProvider objectSelectionProvider)
 {
     this.logger                  = logger;
     this.dialogCoordinator       = dialogCoordinator;
     this.Model                   = model;
     this.objectSelectionProvider = objectSelectionProvider;
     this.Validator               = validator;
     this.discoveryServices       = discoveryServices;
 }
コード例 #39
0
        protected override IModel CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
        {
            var conventionSet = CreateConventionSet(conventionSetBuilder);

            var modelBuilder = new ModelBuilder(conventionSet);
            var model        = (Model)modelBuilder.Model;

            model.SetProductVersion(ProductInfo.GetVersion());

            FindSets(modelBuilder, context);

            _onModelCreating(modelBuilder);

            model.Validate();
            validator.Validate(model);

            return(model);
        }
コード例 #40
0
 public CallCenterOffersController(IModelValidator modelValidator)
 {
     _modelValidator = modelValidator;
 }
コード例 #41
0
 /// <summary>
 ///     Returns the model from the cache, or creates a model if it is not present in the cache.
 /// </summary>
 /// <param name="context"> The context the model is being produced for. </param>
 /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
 /// <param name="validator"> The validator to verify the model can be successfully used with the context. </param>
 /// <returns> The model to be used. </returns>
 public virtual IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
 => _models.GetOrAdd(
     Dependencies.ModelCacheKeyFactory.Create(context),
     // Using a Lazy here so that OnModelCreating, etc. really only gets called once, since it may not be thread safe.
     k => new Lazy <IModel>(
         () => CreateModel(context, conventionSetBuilder, validator),
         LazyThreadSafetyMode.ExecutionAndPublication)).Value;
コード例 #42
0
 protected override void SetProperty(ModelBindingContext bindingContext, ModelMetadata propertyMetadata, ComplexModelDtoResult dtoResult, IModelValidator requiredValidator)
 {
     SetPropertyPublic(bindingContext, propertyMetadata, dtoResult, requiredValidator);
 }
コード例 #43
0
 public ProfileCreateViewModel(IModelValidator <ProfileCreateViewModel> validator) : base(validator)
 {
 }
コード例 #44
0
 /// <summary>
 ///     This API supports the Entity Framework Core infrastructure and is not intended to be used
 ///     directly from your code. This API may change or be removed in future releases.
 /// </summary>
 public ValidatingConvention([NotNull] IModelValidator validator)
 {
     _validator = validator;
 }
コード例 #45
0
 public PersonModelBinder(IModelValidator validator)
 {
     Validator = validator;
 }
コード例 #46
0
 public ConcreteModelSource(IDbSetFinder setFinder, IModelValidator modelValidator)
     : base(setFinder, modelValidator)
 {
 }
コード例 #47
0
 public DomainValidator(IModelValidator modelValidator, IDomainRepository domainRepository)
 {
     _modelValidator   = modelValidator;
     _domainRepository = domainRepository;
 }
コード例 #48
0
ファイル: MutableObjectModelBinder.cs プロジェクト: Nakro/Mvc
        protected virtual void SetProperty(ModelBindingContext bindingContext,
                                           ModelMetadata propertyMetadata,
                                           ComplexModelDtoResult dtoResult,
                                           IModelValidator requiredValidator)
        {
            var bindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase;
            var property = bindingContext.ModelType
                                         .GetProperty(propertyMetadata.PropertyName, bindingFlags);

            if (property == null || !property.CanWrite)
            {
                // nothing to do
                return;
            }

            var value = dtoResult.Model ?? GetPropertyDefaultValue(property);
            propertyMetadata.Model = value;

            // 'Required' validators need to run first so that we can provide useful error messages if
            // the property setters throw, e.g. if we're setting entity keys to null. 
            if (value == null)
            {
                var modelStateKey = dtoResult.ValidationNode.ModelStateKey;
                var validationState = bindingContext.ModelState.GetFieldValidationState(modelStateKey);
                if (validationState == ModelValidationState.Unvalidated)
                {
                    if (requiredValidator != null)
                    {
                        var validationContext = new ModelValidationContext(bindingContext, propertyMetadata);
                        foreach (var validationResult in requiredValidator.Validate(validationContext))
                        {
                            bindingContext.ModelState.AddModelError(modelStateKey, validationResult.Message);
                        }
                    }
                }
            }

            if (value != null || property.PropertyType.AllowsNullValue())
            {
                try
                {
                    property.SetValue(bindingContext.Model, value);
                }
                catch (Exception ex)
                {
                    // don't display a duplicate error message if a binding error has already occurred for this field
                    var targetInvocationException = ex as TargetInvocationException;
                    if (targetInvocationException != null &&
                        targetInvocationException.InnerException != null)
                    {
                        ex = targetInvocationException.InnerException;
                    }
                    var modelStateKey = dtoResult.ValidationNode.ModelStateKey;
                    var validationState = bindingContext.ModelState.GetFieldValidationState(modelStateKey);
                    if (validationState == ModelValidationState.Unvalidated)
                    {
                        bindingContext.ModelState.AddModelError(modelStateKey, ex);
                    }
                }
            }
            else
            {
                // trying to set a non-nullable value type to null, need to make sure there's a message
                var modelStateKey = dtoResult.ValidationNode.ModelStateKey;
                var validationState = bindingContext.ModelState.GetFieldValidationState(modelStateKey);
                if (validationState == ModelValidationState.Unvalidated)
                {
                    dtoResult.ValidationNode.Validated += CreateNullCheckFailedHandler(propertyMetadata, value);
                }
            }
        }
コード例 #49
0
 /// <summary>
 ///     Returns the model from the cache, or creates a model if it is not present in the cache.
 /// </summary>
 /// <param name="context"> The context the model is being produced for. </param>
 /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
 /// <param name="validator"> The validator to verify the model can be successfully used with the context. </param>
 /// <returns> The model to be used. </returns>
 public virtual IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
     => _models.GetOrAdd(ModelCacheKeyFactory.Create(context), k => CreateModel(context, conventionSetBuilder, validator));
コード例 #50
0
 public override IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) =>
 _testModelSource.GetModel(context, conventionSetBuilder, validator);
コード例 #51
0
 public TestInMemoryModelSource(Action<ModelBuilder> onModelCreating, IDbSetFinder setFinder, IModelValidator modelValidator)
     : base(setFinder, modelValidator)
 {
     _testModelSource = new TestModelSource(onModelCreating, setFinder);
 }
コード例 #52
0
 public virtual IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator = null)
 {
     return null;
 }
コード例 #53
0
ファイル: ValidatorCache.cs プロジェクト: ymd1223/Mvc
        private IReadOnlyList<IModelValidator> ExtractValidators(List<ValidatorItem> items)
        {
            var count = 0;
            for (var i = 0; i < items.Count; i++)
            {
                if (items[i].Validator != null)
                {
                    count++;
                }
            }

            if (count == 0)
            {
                return EmptyArray;
            }

            var validators = new IModelValidator[count];

            var validatorIndex = 0;
            for (int i = 0; i < items.Count; i++)
            {
                var validator = items[i].Validator;
                if (validator != null)
                {
                    validators[validatorIndex++] = validator;
                }
            }

            return validators;
        }
コード例 #54
0
 public SKSizePropertyInputViewModel(LayerProperty <SKSize> layerProperty, IProfileEditorService profileEditorService,
                                     IModelValidator <SKSizePropertyInputViewModel> validator) : base(layerProperty, profileEditorService, validator)
 {
     _widthRegistration  = layerProperty.GetDataBindingRegistration <float>("Width");
     _heightRegistration = layerProperty.GetDataBindingRegistration <float>("Height");
 }
コード例 #55
0
 public TemplatesController(ITemplateService templateService, IFileService fileService, IModelValidator<Template> modelValidator)
 {
     _templateService = templateService;
     _fileService = fileService;
     ModelValidator = modelValidator;
 }
コード例 #56
0
        protected virtual void SetProperty(ModelBindingContext bindingContext,
                                           ModelMetadata propertyMetadata,
                                           ComplexModelDtoResult dtoResult,
                                           IModelValidator requiredValidator)
        {
            var bindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase;
            var property     = bindingContext.ModelType
                               .GetProperty(propertyMetadata.PropertyName, bindingFlags);

            if (property == null || !property.CanWrite)
            {
                // nothing to do
                return;
            }

            object value;
            var    hasDefaultValue = false;

            if (dtoResult.IsModelBound)
            {
                value = dtoResult.Model;
            }
            else
            {
                hasDefaultValue = TryGetPropertyDefaultValue(property, out value);
            }

            propertyMetadata.Model = value;

            // 'Required' validators need to run first so that we can provide useful error messages if
            // the property setters throw, e.g. if we're setting entity keys to null.
            if (value == null)
            {
                var modelStateKey   = dtoResult.ValidationNode.ModelStateKey;
                var validationState = bindingContext.ModelState.GetFieldValidationState(modelStateKey);
                if (validationState == ModelValidationState.Unvalidated)
                {
                    if (requiredValidator != null)
                    {
                        var validationContext = new ModelValidationContext(bindingContext, propertyMetadata);
                        foreach (var validationResult in requiredValidator.Validate(validationContext))
                        {
                            bindingContext.ModelState.TryAddModelError(modelStateKey, validationResult.Message);
                        }
                    }
                }
            }

            if (!dtoResult.IsModelBound && !hasDefaultValue)
            {
                // If we don't have a value, don't set it on the model and trounce a pre-initialized
                // value.
                return;
            }

            if (value != null || property.PropertyType.AllowsNullValue())
            {
                try
                {
                    property.SetValue(bindingContext.Model, value);
                }
                catch (Exception ex)
                {
                    // don't display a duplicate error message if a binding error has already occurred for this field
                    var targetInvocationException = ex as TargetInvocationException;
                    if (targetInvocationException != null &&
                        targetInvocationException.InnerException != null)
                    {
                        ex = targetInvocationException.InnerException;
                    }
                    var modelStateKey   = dtoResult.ValidationNode.ModelStateKey;
                    var validationState = bindingContext.ModelState.GetFieldValidationState(modelStateKey);
                    if (validationState == ModelValidationState.Unvalidated)
                    {
                        bindingContext.ModelState.AddModelError(modelStateKey, ex);
                    }
                }
            }
            else
            {
                // trying to set a non-nullable value type to null, need to make sure there's a message
                var modelStateKey   = dtoResult.ValidationNode.ModelStateKey;
                var validationState = bindingContext.ModelState.GetFieldValidationState(modelStateKey);
                if (validationState == ModelValidationState.Unvalidated)
                {
                    dtoResult.ValidationNode.Validated += CreateNullCheckFailedHandler(propertyMetadata, value);
                }
            }
        }
コード例 #57
0
 /// <summary>
 ///     Returns the model from the cache, or creates a model if it is not present in the cache.
 /// </summary>
 /// <param name="context"> The context the model is being produced for. </param>
 /// <param name="conventionSetBuilder"> The convention set to use when creating the model. </param>
 /// <param name="validator"> The validator to verify the model can be successfully used with the context. </param>
 /// <returns> The model to be used. </returns>
 public virtual IModel GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator)
 => _models.GetOrAdd(
     Dependencies.ModelCacheKeyFactory.Create(context),
     k => CreateModel(context, conventionSetBuilder, validator));
コード例 #58
0
 static IModelValidator GetValidator(Type modelType)
 {
     IModelValidator validator;
     if (!validators.TryGetValue(modelType.TypeHandle, out validator))
     {
         var typeName = string.Format("{0}.{1}Validator", modelType.Namespace, modelType.Name);
         var type = modelType.Assembly.GetType(typeName, true);
         validators[modelType.TypeHandle] = validator = (IModelValidator) Activator.CreateInstance(type);
     }
     return validator;
 }
コード例 #59
0
 /// <summary>
 /// Create and initialize an instance of the LoginController class.
 /// </summary>
 /// <param name="authenticationService"></param>
 /// <param name="modelValidator"></param>
 public LoginController(IAuthenticationService authenticationService, IModelValidator<LoginViewData> modelValidator)
 {
     this._authenticationService = authenticationService;
     this.ModelValidator = modelValidator;
 }
コード例 #60
0
 public PagesController(INodeService nodeService, ITemplateService templateService, IFileService fileService, ISectionService sectionService, IModelValidator <Node> modelValidator, ModuleLoader moduleLoader)
 {
     _nodeService        = nodeService;
     _templateService    = templateService;
     _fileService        = fileService;
     _sectionService     = sectionService;
     this.ModelValidator = modelValidator;
     _moduleLoader       = moduleLoader;
 }