나는 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");
}
}
Ninject 1, 2 또는 3을 사용 중입니까? 3이 아니라면 NuGet 버전으로 바로 이동 –
버전 3을 사용하고 있습니다. –