给定以下类型
private class MyTestDummyClassValidationDef : ValidationDef<MyTestDummyClass>
{
...
}
public class ValidationDef<T> : IValidationDefinition<T>, IConstraintAggregator, IMappingSource where T : class
{ }
public interface IMappingSource
{
IClassMapping GetMapping();
}
public interface IClassMapping
{
Type EntityType { get; }
...
}
在配置时,我知道所有的 ValidationDefinitions;上面的“MyTestDummyClassValidationDef”就是这种定义的一个例子。
如果您遵循继承/实现线索,最后是由 IClassMapping 公开的 EntityType。
作为我的验证基础设施的一部分,可能会要求各种对象进行自我验证。对象可能有也可能没有为它们定义的 ValidationDef,因为验证不适用于该对象或尚未编写定义。如果一个对象被要求验证自己并且没有定义,那么将发生运行时错误。
所以,我想要的是有一个 EntityTypes 列表,我可以用来在运行时检查。如果要求验证自身的对象不在列表中,那么我可以避免否则会发生的运行时错误。
我该怎么做?
干杯,
贝里尔
我正在寻找的代码
public EntityValidator(ValidatorEngine validatorEngine, IEnumerable<Type> defTypes) {
ValidationDefs = new List<Type>();
foreach (var type in defTypes)
{
if (type.BaseType.GetGenericTypeDefinition() != typeof(ValidationDef<>)) continue;
var mappingSource = (IMappingSource) Activator.CreateInstance(type);
var entityType = mappingSource.GetMapping().EntityType;
ValidationDefs.Add(entityType);
}