Ninject.MVC3 + FluentValidation + Factory有没有人用?

时间:2011-10-13 19:22:47

标签: asp.net-mvc-3 ninject factory-pattern fluentvalidation

我对如何在NinjectFluentValidatior中使用工厂表示怀疑。

This article帮助了我很多,但我不明白如何使用工厂来实例化验证器

我还发现了一些其他文章like this但是使用了StructureMap!

按照我执行的步骤

  1. 通过nuget
  2. 安装NinjectFluentValidation
  3. 已安装Ninject.Web.Mvc.FluentValidation工厂类
  4. 现在?
  5. 安装Ninject时,他在NinjectMVC3.cs文件夹中创建了App_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();
        }
    }
    

    我的问题

    1. 在工厂的RegisterCoupleValidator课程中,我怎么没有验证器的实例? 具体在new HumanValidator()

    2. HumanValidator类中,HumanValidate属性始终为null,为什么?


    3. Obs1:我不想实例化FluentValidator的这些验证器,我希望Ninject使用这个工厂为我解析依赖关系。

      Obs2:我不必访问Ninject内核,因为在几篇帖子中我读到这将是一个反伙伴。

1 个答案:

答案 0 :(得分:1)

看看this blog post。这家伙正在使用NuGet包用Ninject设置FluentValidation。这很简单,也很好解释。