使用PostSharp属性多播排除显式接口方法

时间:2013-06-10 14:59:05

标签: aop multicast postsharp explicit-interface explicit-implementation

假设我有一个界面:

namespace MyCompany.Security
{
    public interface IMySecurable
    {
        string GetContext();
    }
}

这是由许多类实现的,例如

namespace MyCompany.Repositories
{
    using System.Collections.Generic;
    using MyCompany.Security;

    public class MyRepository : IMySecurable
    {
        public IEnumerable<string> GetAll()
        {
            // Repository logic
        }

        string IMySecurable.GetContext()
        {
            // Logic here
        }
    }
}

我正在使用PostSharp属性多播将我的方面(MySecurityAspect)应用于命名空间中的每个类。

[assembly: MySecurityAspect(AttributeTargetTypes = "MyCompany.Repositories.*", AttributePriority = 1)]

但是我无法弄清楚如何排除显式接口方法实现,即

string IMySecurable.GetContext()
{
    // Logic here
}

我尝试使用此声明跟踪文档here

[assembly: MySecurityAspect(AttributeTargetMembers = "GetContext", AttributeExclude = true, AttributePriority = 2)]

然而,这似乎不起作用。

当显式接口实现时,如何使用属性多播排除方法?

1 个答案:

答案 0 :(得分:0)

根据http://support.sharpcrafters.com/discussions/questions/306-suppress-some-exception-logging-in-diagnostic-toolkit-configuration

  

排除设置为true的属性仅影响处理的内容   到排除的发生点,即排除将起作用   只有在排除之前发生的属性。

换句话说,属性的顺序很重要。

如果无效,请直接在http://support.sharpcrafters.com上提问。

BTW:我发现在PSProj文件中指定Postsharp方面比在代码中添加属性更灵活。