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によると

除外を true に設定した属性は、除外の発生時点までに処理されたもののみに影響を与えます。つまり、除外は、除外の前に発生した属性のみに影響を与えます。

つまり、属性の順序が重要です。

問題が解決しない場合は、 http://support.sharpcrafters.comで直接質問してください。

ところで: PSProj ファイルで Postsharp の側面を指定する方が、コードに属性を追加するよりも柔軟であることがわかりました。

于 2013-08-09T23:34:20.783 に答える