0

假设我有一个界面:

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
}

我曾尝试按照此处的文档,使用以下语句:

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

但是,这似乎不起作用。

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

4

1 回答 1

0

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

将 exclude 设置为 true 的属性仅影响已处理到出现 exclude 的点,即 exclude 将仅影响出现在 exclude 之前的属性。

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

如果没有帮助,请直接在http://support.sharpcrafters.com上提问。

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

于 2013-08-09T23:34:20.783 回答