私のプロジェクトでは、2 つのライブラリを使用します。
- ビュー モデルの検証のための FluentValidation (http://fluentvalidation.codeplex.com/)
- ビュー モデルのメタデータをスムーズに構成するための MVC 拡張機能 (http://mvcextensions.codeplex.com/)
これらを構成する方法は次のとおりです (これはコンテナー ビルダー クラスで行われます)。
/* Model Metadata Registration */
IEnumerable<IModelMetadataConfiguration> configurations = container.Resolve<IEnumerable<IModelMetadataConfiguration>>();
IModelMetadataRegistry registry = new ModelMetadataRegistry();
configurations.Each(configuration => registry.RegisterModelProperties(configuration.ModelType, configuration.Configurations));
ModelMetadataProviders.Current = new ExtendedModelMetadataProvider(registry);
/* Fluent Validation Configuration */
FluentValidationModelValidatorProvider.Configure(x =>
{
x.ValidatorFactory = container.Resolve<IValidatorFactory>();
x.AddImplicitRequiredValidator = false;
})
アプリケーションを実行すると、モデルは FluentValidationModelValidatorProvider によって検証されません。代わりに、デフォルトのメカニズムが使用されます。したがって、FluentValidationModelValidatorProvider 構成をコメントアウトし、代わりにこのアプローチを使用する必要がありました。
IValidator validator = _validatorFactory.GetValidator(typeof(RegisterUserCommand));
ValidationResult result = validator.Validate(command);
その後:
if (!result.IsValid)
{
command.Password = String.Empty;
command.ConfirmPassword = String.Empty;
ModelState.Clear();
ModelState.AddModelErrors(result.Errors);
return View(command);
}
しかし、それらを連携させる方法がなければなりません。何かアドバイス?