Перехват объектов с замком Виндзор II Интерцептор - PullRequest
3 голосов
/ 02 июня 2010

У кого-нибудь есть предложения по лучшему способу перехвата свойств с помощью Castle DynamicProxy?

В частности, мне нужно PropertyInfo, который я перехватываю, но он не напрямую связан с IInvocation, поэтому я делаю:

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();
    }
}

Тогда в моем IInterceptor:

public void Intercept(IInvocation invocation)
{
    bool doSomething = invocation.Method
                                 .GetProperty()
                                 .GetCustomAttributes(true)
                                 .OfType<SomeAttribute>()
                                 .Count() > 0;

}

1 Ответ

3 голосов
/ 03 июня 2010

Как правило, это не доступно.DynamicProxy перехватывает методы (включая методы получения и установки), и ему не нужны свойства.

Вы можете немного оптимизировать этот код, сделав перехватчик IOnBehalfAware (см. здесь ) иобнаружение метода-> сопоставление свойств заранее.

...