이 솔루션은 잘 작동합니다. 나는 생성자 주입이 여기에 옵션이라고 생각하지 않지만 속성 주입은 그 일을 할 것입니다. 당신은 ModelValidatorProvider
에서 파생 수 있으며, 구현이에 비슷한 보일 수 있습니다 : 나는 ModelMetadata
에 자세히 보면 그냥 검증을 반환할지 여부를 결정하는 refelction를 사용하지만, 아마도 더 나은 수행 할 수 있습니다하지 않았다
public class MyModelValidatorProvider : ModelValidatorProvider
{
private IDiContainer _container;
public MyModelValidatorProvider(IDiContainer container)
{
_container = container;
}
public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context)
{
List<ModelValidator> validators = new List<ModelValidator>();
PropertyInfo targetProperty = metadata.ContainerType.GetProperty(metadata.PropertyName);
if (targetProperty.GetCustomAttributes(false).Any(attr => attr.GetType() == typeof(NoEmailTakenAttribute)))
{
DataAnnotationsModelValidator<NoEmailTakenAttribute> validator = new DataAnnotationsModelValidator<NoEmailTakenAttribute>(
metadata, context, _container.Resolve<NoEmailTakenAttribute>());
validators.Add(validator);
}
return validators;
}
}
.
그런 다음
Global.asax
에 다음을 추가합니다
ModelValidatorProviders.Providers.Add(new MyModelValidatorProvider(InstanceOfContainer));
하고 갈 수 있어야합니다. 여기서 유일한 문제는 기본 메커니즘을 통해 유효성 검사기가 생성된다는 것입니다. 분명히 이것은 유효성 검사기에 적절한 종속성이 주입되지 않게합니다. 유효성 검사기를 기본 작성에서 제외하는 방법을 알지 못하지만 유효성 검사기 내부에서 null 값을 제대로 검사하면 정상적으로 작동합니다 (약간의 해결 방법이 있지만 어쩌면 더 나은 방법을 찾을 수 있습니다).
달성하려는 목표는 무엇입니까? – Jeroen
제어기 작성시 DI를 사용할 수있는 것처럼 DI 기능으로 유효성 검증 속성을 작성하십시오. –
DI가 무엇을 의미하는지 알고 싶습니까? – Jeroen