我对如何在Ninject和FluentValidatior中使用工厂存有疑问。
这篇文章对我帮助很大,但我不明白如何使用工厂来实例化我的验证器:
我还发现了一些其他类似的文章,但使用的是 StructureMap!
按照我执行的步骤
- 通过 nuget安装了Ninject和FluentValidation
- 为工厂类安装了 Ninject.Web.Mvc.FluentValidation
- 现在?
安装 Ninject 时,他创建了NinjectMVC3.cs
inApp_Start
文件夹,因此我在方法中设置了我的依赖RegisterServices
项:
kernel.Bind<IHumanValidator>().To<ReCaptchaValidate>().InRequestScope();
在Global.asax中,Application_Start
方法:
var ninjectValidatorFactory = new NinjectValidatorFactory(new StandardKernel());
ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(ninjectValidatorFactory));
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
FluentValidationModelValidatorProvider.Configure();
FluentValidator 我有:
public class RegisterCoupleValidator : AbstractValidator<RegisterCoupleModel>
{
public RegisterCoupleValidator()
{
RuleFor(p => p.HumanValidator).SetValidator(new HumanValidator());
}
}
HumanValidator.cs
public class HumanValidator : PropertyValidator
{
[Inject]
public IHumanValidator HumanValidate { get; set; }
public HumanValidator(IHumanValidator hValidator)
: this()
{
HumanValidate = hValidator;
}
public HumanValidator()
: base("Texto digitado está incorreto. Por favor, tente novamente.")
{ }
protected override bool IsValid(PropertyValidatorContext context)
{
return HumanValidate.IsValid();
}
}
我的问题
在
RegisterCoupleValidator
工厂的课堂上,我如何没有验证器的实例?具体在new HumanValidator()
在
HumanValidator
类中,HumanValidate
属性始终为空,为什么?
Obs1:我不想实例化 FluentValidator 的这些验证器,我希望 Ninject 使用这个工厂为我解决依赖关系。
Obs2:我不必访问 Ninject 内核,因为在几篇文章中我读到这将是一个反合作伙伴。