次のタイプが与えられます
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);
}