确定泛型类是否实现类型

本文关键字:实现 类型 是否 泛型类 | 更新日期: 2023-09-27 17:56:02

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

存在。

有什么建议吗?

确定泛型类是否实现类型

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

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

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