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

时间:2018-07-25 17:36:47

标签: c# attributes aop postsharp aspect

我在给定名称空间中的所有EF实体的组装级别上多播一个接口介绍,但是我想从该介绍中排除该名称空间中派生自DbContext的所有类。如果不按名称明确排除每个DbContext派生的类,则不确定如何执行此操作。 :(

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

1 个答案:

答案 0 :(得分:1)

属性多播不允许在目标类型的基类上进行过滤。对于这种过滤,您可以在方面实现CompileTimeValidate方法,如果目标类型是从false派生的,则返回DbContext

public override bool CompileTimeValidate(Type targetType) 
{
    if (typeof(DbContext).IsAssignableFrom(targetType))
        return false;

    return true;
}

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