【问题标题】:Determine if Generic Class Implements Type确定泛型类是否实现类型
【发布时间】:2011-08-23 14:59:41
【问题描述】:

我正在从事一个混合了流利映射和自动映射的清晰架构项目。一个基本的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> 

存在。

有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 2014-08-19
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多