确定通用类是否实现类型

时间:2011-05-11 20:11:46

标签: c# generics reflection fluent-nhibernate sharp-architecture

我正在研究一个混合了流畅映射和自动映射的尖端架构项目。一个基本的尖端架构项目已经有一个方法(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 个答案:

答案 0 :(得分:1)

您可以使用Type.MakeGenericType创建泛型类型,因此假设您有一个包含所有映射的程序集:

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

答案 1 :(得分:0)

您是否考虑过映射所有类,但是对于要显式映射的类(而不是常规的流畅映射)使用Mapping*Override*