开发者

Intercept Properties With Castle Windsor IInterceptor

开发者 https://www.devze.com 2023-01-01 18:57 出处:网络
Does anyone have a suggestion on a better way to intercept a properties with Castle DynamicProxy? Specifically, I need the PropertyInfo that I\'m intercepting, but it\'s not directly on the IInvocat

Does anyone have a suggestion on a better way to intercept a properties with Castle DynamicProxy?

Specifically, I need the PropertyInfo that I'm intercepting, but it's not directly on the IInvocation, so what I do is:

public static PropertyInfo GetProperty(this MethodInfo method)
{
    bool takesArg = method.GetParameters().Length == 1;
    bool hasReturn = method.ReturnType != typeof(void);
    if (takesArg == hasReturn) return null;
    if (takesArg)
    {
        return method.DeclaringType.GetProperties()
            .Where(prop => prop.GetSetMethod() == method).FirstOrDefault();
    }
    else
    {
        return method.DeclaringType.GetProperties()
            .Where(prop => prop.GetGetMethod() == method).FirstOrDefault();
    }
}

Then in my IInterceptor:

public void Intercept(IInvocation invocation)
{
    bool doSomething = invocation.Method
                                 .GetProperty()
                                 .GetCustomAttributes(true)
              开发者_Python百科                   .OfType<SomeAttribute>()
                                 .Count() > 0;

}


Generally this is not available. DynamicProxy intercepts methods (incl. getters and setters), and it does not care about properties.

You could optimize this code a bit by making the interceptor IOnBehalfAware (see here) and discovering the method->property mapping upfront.

0

精彩评论

暂无评论...
验证码 换一张
取 消