Определите, реализует ли универсальный класс тип - PullRequest
1 голос
/ 12 мая 2011

Я работаю над проектом с острой архитектурой, который смешивает плавные и автоматические отображения.Базовый проект с острой архитектурой уже имеет метод (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> 

существует.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 12 мая 2011

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

public bool ShouldMap(Assembly mappingAssembly, Type type)
{
    Type classMapType = typeof(ClassMap<>).MakeGenericType(type);
    return mappingAssembly.GetTypes().Any(t => t.IsSubclassOf(classMapType));
}
0 голосов
/ 12 мая 2011

рассматривали ли вы отображение ВСЕХ классов, но с использованием Отображение * Переопределение * для классов, которые вы хотите отобразить явным образом (вместо обычного беглого отображения)?

...