.NET과 제네릭에서 정말 근본적인 것임을 잊어 버렸기 때문에 약간의 기분이 들었습니다. 방법은이 문제를 해결합니다. 프로젝트 C# .NET을 4.0이다.기본 클래스 메서드 호출에 사용되는 C# 일반 매개 변수는 기본 클래스 - 파생되지 않았습니다. (
을 내가 BaseEntity이있는 나는 추상적 인 검증에 노력하고 기본 엔티티 클래스가 있습니다.
이public abstract class BaseEntity : IEntity
{
public bool IsValid
{
get
{
Validator.Validate(this);
return validationResults.Count == 0;
}
}
.
.
}
유효성 검사기 클래스로 초기화하는 Static Gateway 사용 지정된 IValidator 팩토리. 제공된 구체적인 팩토리 팩토리 구현은, g 실제 검증을 수행하는 IValidator.
public class Validator
{
private static IValidatorFactory factory;
public static void Initialize(IValidatorFactory validationFactory)
{
factory = validationFactory;
}
public static void Validate<TEntity>(TEntity entity) where TEntity : IEntity
{
if (factory == null) return null;
var validator = factory.GetValidator<TEntity>();
if (validator == null) return;
entity.ClearValidationResults();
validator.Validate(entity); //Adds validation results to the entity's validation result collection
}
}
내 문제는
factory.GetValidatory<TEntity>()
가 검사기 클래스에서 호출 될 때, TEntity이 대신 의 BaseEntity 내가 할 필요 엔티티를 유도을 입력 한 것입니다. 그 결과, 공장은
IValidator<BaseEntity>
대신
IValidator<DerivedEntity>.
이 클래스는 그래서 실제로 대해서 Validator.validate (이)이 BaseEntity에 호출되고 아마 때문이다의 반환을 시도
Validator.Validate<BaseEntity>(this)
내가 원하는 것은
입니다Validator.Validate <>() 어쨌든 BaseEntity 대신 파생 된 유형을 사용합니까?
BaseEntity는 컴파일 타임에 파생 형식을 "알지 못합니다.
도움 주셔서 감사합니다.
는
공장 여전히 IValidator을 반환해야하므로 허용되지 않는 방식으로 작동하는지 확신 할 수 없습니다. IValidator GetValidator (Type entityType); –
이 답변은 합리적인 방법을 제공하지만 내 문제에 대한 해결책을 제공하지는 않습니다. 나는 내가 어떻게 일을하는지 재검토해야 할 것이다. –