2013-05-24 1 views
2

나는 fody.validar를 사용하고있어 매우 잘 작동하지만 집에서 만든 것 대신 ValidationFactory로 Ninject를 사용하고 싶습니다. 왜냐하면 유효성이 검사되는 객체의 컨텍스트 외부에서 유효성을 검사하기 위해 일부 서비스를 주입해야하기 때문입니다.등록 및 FluentValidations 얻기위한 Ninject 구문은 무엇입니까 IValidator

은 누군가가 나이를 다시 도울 수 :

public static class ValidationFactory 
{ 
    static readonly Dictionary<RuntimeTypeHandle, IValidator> Validators = new Dictionary<RuntimeTypeHandle, IValidator>(); 

    public static IValidator GetValidator(Type modelType) 
    { 
     IValidator validator; 
     if (!Validators.TryGetValue(modelType.TypeHandle, out validator)) 
     { 
      var typeName = modelType.Name + "Validator"; 
      var type = Type.GetType("Nexcom.KnownTypes.PropertyFields.Validation." + typeName, true); 
      validator = (IValidator)Activator.CreateInstance(type); 
      Debug.Assert(validator != null); 
      Validators.Add(modelType.TypeHandle, validator); 
     } 
     return validator; 
    } 
} 

대신해서 Ninject를 사용하려면?

는이 코드

public class FluentValidatorModule : NinjectModule 
{ 
    public override void Load() 
    { 
     AssemblyScanner 
      .FindValidatorsInAssemblyContaining<TextBoxValidator>() 
      .ForEach(match => Bind(match.InterfaceType).To(match.ValidatorType)); 
    } 
} 

을 발견하고이처럼 엮은 :

var kernel = new StandardKernel(new FluentValidatorModule()); 

하지만 모두 함께 결합하는 방법을 모르겠어요.

는 여기가 PropertyField에 결합 할 유효성 검사기 중 하나입니다

public class BasePropertyFieldValidator<T> : AbstractValidator<T> where T: IPropertyField 
{ 
    [Inject] private IUniquePropertyName _uniqueProperty; 

    public BasePropertyFieldValidator() 
    { 
     RuleFor(c => c.Name) 
      .Cascade(CascadeMode.StopOnFirstFailure) 
      .NotEmpty() 
      .WithMessage("Please specify a name") 
      .Matches(UniquePropertyName.ValidNameRegex) 
      .WithMessage("Name can only contain: a-z, A-Z, 0-9, _") 
      .Must(_uniqueProperty.NameIsUnique) 
      .WithMessage("Please enter a unique name"); 
    } 
} 
+0

Ninject 1, 2 또는 3을 사용 중입니까? 3이 아니라면 NuGet 버전으로 바로 이동 –

+0

버전 3을 사용하고 있습니다. –

답변

0

Bind 보내고 비트는 컴파일 가정, OK 보인다. 이제 추측하십시오 .. AssemblyScanner 비트를 Ninject.Extensions.Conventions 비트로 이식해야 할 수 있습니다. 그러나 그것에 대해 아무 것도 말하지 않았습니다.)

가장 중요한 것은 private 필드를 삽입하는 것입니다. 위키가 말했듯이, V2에서는 필드가 주입되지 않습니다. (상당히 비밀스런 것도 아닙니다.)

BasePropertyFieldValidator 클래스가 소비되는 위치 및/또는 잘못된 점에 대한 정보도 표시되지 않았습니다.

+0

시간을내어 코드를 살펴 보셔 주셔서 감사합니다. 내가 정말로 알고 싶은 것은 이것이라고 생각합니다 : 모든 유효성 검사기를 등록하는 방법과 지정된 형식에 대해 유효성 검사기를 얻는 방법은 무엇입니까? 초보자를위한 IOC라고 생각합니다. (- : –

+0

@MartinAndersen 'FluentValidatorModule'은 [V3에서 직접 지원된다고 가정합니다.] 올바른 종류의 일을하고 있습니다. 그렇지 않다면, Conventions 위키를 빠르게 살펴 봐야합니다. 당신은 당신이 그것을 어떻게 사용하는지 다시 모르겠다 - 어떤 종류의 코드를 쓰고 있는가? 누가이 수업을 사용하고 있는가? 당신은 정말로 당신의 인용 된 도서관을 보러 지루할 때까지 기다릴 수있다. 코드 및/또는 컨테이너에 작은 부분을 표시 할 수 있습니다. –