2011-05-11 237 views
1

我正在研究一个混合了流畅映射和自动映射的尖锐体系结构项目。一个基本的尖锐体系结构项目已经有一个方法(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) 

如果泛型类

ClassMap<type> 

存在返回true。

有什么建议吗?

回答

1

您可以使用Type.MakeGenericType泛型类型,因此假设你有一个包含所有映射的组件,你可以这样做:

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

您是否考虑映射所有的类,但是使用Mapping*Override*作为您想显式映射的类(而不是常规流畅映射)?