Я сомневаюсь, как использовать фабрику в Ninject и FluentValidatior .
Эта статья мне очень помогла, но я не понимаю, как использовать фабрику для создания экземпляров моих валидаторов :
Я также нашел некоторые другие статьи , подобные , но с StructureMap!
Следуйте инструкциям, которые я выполнил
- Установлено Ninject и FluentValidation через nuget
- Установлено Ninject.Web.Mvc.FluentValidation для заводского класса
- А сейчас?
При установке 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();
}
}
Мои вопросы
В RegisterCoupleValidator
классе с фабрикой как у меня нет экземпляров валидаторов?
В частности, в new HumanValidator()
В HumanValidator
классе свойство HumanValidate
всегда равно null, почему?
Obs1: Я не хочу создавать экземпляры этих валидаторов FluentValidator, я хочу, чтобы Ninject разрешил для меня зависимости с помощью этой фабрики.
Obs2: Мне не нужно было бы обращаться к ядру Ninject, поскольку в нескольких постах я читал, что это будет анти-партнером.