4


1

Castle Windsorインターセプターからメソッドのカスタム属性にアクセスします

キャッスルインターセプター内のメソッドに適用されたカスタム属性にアクセスしようとしています、例えば:

[MyCustomAttribute(SomeParam = "attributeValue")]
public virtual MyEntity Entity { get; set; }

次のコードを使用してください。

internal class MyInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        if (invocation.Method.GetCustomAttributes(typeof(MyCustomAttribute), true) != null)
        {
            //Do something
        }
    }
}

メソッドが呼び出されたときにインターセプターは正常に起動していますが、このコードはカスタム属性を返しません。 どうすればこれを達成できますか?

3 Answer


4


これには、 `Attribute.GetCustomAttribute(…​)`静的メソッドを試してください。 奇妙ですが、これらの2つのメソッドは、何らかの奇妙な理由で異なる結果を返す場合があります。


3


Try

private static Attribute getMyCustomAttribute(IInvocation invocation)
{
   var methodInfo = invocation.MethodInvocationTarget;
   if (methodInfo == null)
   {
      methodInfo = invocation.Method;
   }
   return Attribute.GetCustomAttribute(methodInfo, typeof(MyCustomAttribute), true);
}


1


私はそれを理解したと思う-それはプロパティとメソッドの違いのためです。 インターセプターをトリガーするのはget_メソッドであり、これは親プロパティーの属性で装飾されていません。