PostSharp:从 类 中排除从公共基础派生的同一命名空间中的多播属性

PostSharp: Exclude multicasted attribute from classes within same namespace that derive from common base

我在给定命名空间中的所有 EF 实体上在程序集级别多播接口介绍,但我想从介绍中排除该命名空间中派生自 DbContext 的任何 classes。不确定如何在不按名称明确排除每个 DbContext 派生的 class 的情况下执行此操作。 :(

[assembly: MyApi.IntroduceAspect(AttributeTargetTypes = "MyApi.Models.*")]
[assembly: MyApi.IntroduceAspect(AttributeTargetTypes = "MyApi.Models.SomeContext", AttributeExclude = true)]
[assembly: MyApi.IntroduceAspect(AttributeTargetTypes = "MyApi.Models.SomeOtherContext", AttributeExclude = true)]

属性多播不允许在目标类型的基础 class 上进行过滤。对于这种过滤,您可以在方面实现 CompileTimeValidate 方法,如果目标类型来自 DbContext.

,则可以实现 return false
public override bool CompileTimeValidate(Type targetType) 
{
    if (typeof(DbContext).IsAssignableFrom(targetType))
        return false;

    return true;
}

文档 link:http://doc.postsharp.net/aspect-validation