2. 나는 응답 클래스 유형을 취하는 일반 유창 검사기 < T>를 가지고 있습니다. 나는 많은 응답이 특히
public override void DoSomeService(object response) {
object validator = null;
if (response.GetType()==typeof(TypeA_Response)) validator= new Validator<TypeA_Response>();
if (response.GetType()==typeof(TypeB_Response)) validator= new Validator<TypeB_Response>();
if (response.GetType()==typeof(TypeC_Response)) validator= new Validator<TypeC_Response>();
//......
if (response.GetType()==typeof(TypeX_Response)) validator= new Validator<TypeX_Response>();
if (validator.IsValid) {
//do more stuff ...
}
}
을하지만 그 좋은되지 않습니다 :
지금, 나는 하나씩 유형 검사를 할 수 있습니다. 나는 짧고 일반적인 것을 원한다.
//response could be TypeA_Response, TypeB_Response, TypeX_Response
public override void DoSomeService(object response) {
var validator = new Validator<T>();
if (validator.IsValid) {
//do more stuff ...
}
}
Fluent Validator에 T를 정의해야하므로 물론 작동하지 않습니다. 어떤 유형이 "객체 응답"인지를 감지하고 그것을 런타임에 동적으로 T로 채우려면 어떻게해야합니까?
또는이 모든 것을 함께 피하고 더 나은 구조의 유효성 검사기 < T>를 사용하려면 어떻게해야합니까?
참고 : 기본 서비스 클래스와 DoSomeService 함수 서명을 변경할 수 없습니다. 타사 패키지의 재정의 기능입니다.
당신이 인터페이스, IValidator를 사용할 수
DoSomething
방법 내에서 제네릭이 아닌 형식을 사용하고 IValidator의 각 구현은이 있는지 확인해야합니다 해당 형식에 대한 자체 유효성 검사를 캡슐화하는 Validate() 메서드? 이것은 미지의 제네릭에 대한 필요성을 줄여 줄 것이라고 생각합니다. –