Определите, реализует ли универсальный класс тип

Я работаю над проектом с четкой архитектурой, в котором сочетаются плавные сопоставления и автоматические сопоставления. Базовый проект с четкой архитектурой уже имеет метод (AutoMappingConfiguration.ShouldMap), который определяет, должен ли тип автоматически сопоставляться или нет. Мой на данный момент выглядит так:

    public override bool ShouldMap(System.Type type)
    {
        if (type == typeof(ActiveUser))
            return false;

        return type.GetInterfaces().Any(x =>
             x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEntityWithTypedId<>));
    }

По сути, тип ActiveUser сопоставляется с использованием свободного сопоставления, а все остальное сопоставляется с использованием автоматического сопоставления, за исключением, конечно, общих базовых классов. Я нахожусь в том месте, где я буду добавлять более свободно отображаемые классы, и я действительно не хочу продолжать добавлять операторы if в этот метод, чтобы исключить их. Мне в основном нужен метод

bool ShouldMap(System.Type type)

вернуть true, если общий класс

ClassMap<type> 

существуют.

Какие-либо предложения?


person Jeff B    schedule 11.05.2011    source источник


Ответы (2)


Вы можете создать универсальный тип, используя Type.MakeGenericType, поэтому предполагая, что у вас есть сборка, содержащая все сопоставления, которые вы можете сделать:

public bool ShouldMap(Assembly mappingAssembly, Type type)
{
    Type classMapType = typeof(ClassMap<>).MakeGenericType(type);
    return mappingAssembly.GetTypes().Any(t => t.IsSubclassOf(classMapType));
}
person Lee    schedule 11.05.2011