【发布时间】:2017-11-10 00:56:27
【问题描述】:
我无法让自定义验证器在客户端工作。在 ASP.NET MVC5 中,我曾经使用 Simple Injector 来注册验证器:
var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
container.Register<IValidatorFactory, ApplicationValidatorFactory>(Lifestyle.Singleton);
container.Register(typeof(IValidator<>), assemblies);
container.RegisterConditional(typeof(IValidator<>),
typeof(ValidateNothingDecorator<>),
Lifestyle.Singleton,
context => !context.Handled);
并注册所有自定义验证器:
// Register Simple Injector validation factory in FV
FluentValidationModelValidatorProvider.Configure(provider =>
{
provider.ValidatorFactory = new ApplicationValidatorFactory(container);
provider.AddImplicitRequiredValidator = false;
provider.Add(typeof(UniqueEmailValidator),
(m, c, d, v) => new UniqueEmailPropertyValidator(m, c, d, v));
provider.Add(typeof(UniqueUsernameValidator),
(m, c, d, v) => new UniqueUsernamePropertyValidator(m, c, d, v));
provider.Add(typeof(StringNoSpacesValidator),
(m, c, d, v) => new StringNoSpacesPropertyValidator(m, c, d, v));
provider.Add(typeof(PasswordStrengthValidator),
(m, c, d, v) => new PasswordStrengthPropertyValidator(m, c, d, v));
});
在JS端添加这些方法:
jQuery.validator.addMethod("nospaces", function(value, element) {
return value.indexOf(" ") < 0 && value != "";
}, language.username_has_spaces);
jQuery.validator.unobtrusive.adapters.add("nospaces", function (options) {
options.rules["nospaces"] = true;
if (options.message) {
options.messages["nospaces"] = options.message;
}
});
jQuery.validator.unobtrusive.adapters.add("passwordmeter", function (options) {
options.rules["passwordmeter"] = true;
if (options.message) {
options.messages["passwordmeter"] = options.message;
}
});
就是这样!它完美无缺!
我如何对 ASP.NET Core 1.1 做同样的事情?
我已按照文档中提到使用 Microsoft 的 DI 进行注册:
services.AddMvc().AddFluentValidation(
fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>());
但这有几个问题:
- 无法让自定义验证器在客户端上工作(内置验证器效果很好)
- 已经在 SimpleInjector 中注册的自定义验证器中使用的服务必须使用 Microsoft 的 DI 一个一个地再次注册。
services.AddTransient<IUserRegistrationService, UserRegistrationService>();
【问题讨论】:
标签: c# asp.net-mvc asp.net-core-mvc simple-injector fluentvalidation