Castle IInterceptorSelector和实现类型方法

时间:2015-03-03 13:24:57

标签: c# inversion-of-control castle-windsor aop interceptor

您好我已经创建了一个Interceptor for Retry Support,并使用RetryAttribute标记方法。

如果类型具有带有该自定义属性的方法,我已经实现了一个IInterceptorSelector来仅返回Interceptor。

在RetryInterceptor类中,我在调用提供的方法上查找该属性,如果存在,则运行重试逻辑。

我希望让IInterceptorSelector在方法的基础上过滤拦截器集,但传入的方法是接口类型,而不是实现它的实际类。有没有办法做到这一点?

感谢。

1 个答案:

答案 0 :(得分:1)

您只需使用界面方法info

从类型中检查方法信息
public class Selector : IInterceptorSelector
{
    public IInterceptor[] SelectInterceptors(Type type, MethodInfo method, IInterceptor[] interceptors)
    {
        var attributes = type.GetMethod(method.Name).GetCustomAttributes(false);
        if (attributes.OfType<Retry>().Any())
        {
            // return retry interceptor
        }
        else
        {
            // return no interceptor
        }
    }
}