я написал пример, как этотКак использовать IInterceptor в Castle.DynamicProxy?
Простой класс Калькулятор:
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
реализован "IInterceptor", обеспечиваемой DynamicProxy
[Serializable]
public abstract class Interceptor : IInterceptor
{
public void Intercept(IInvocation invocation)
{
ExecuteBefore(invocation);
invocation.Proceed();
ExecuteAfter(invocation);
}
protected abstract void ExecuteAfter(IInvocation invocation);
protected abstract void ExecuteBefore(IInvocation invocation);
}
создал класс перехватчик и унаследовал от Класс «Перехватчик»
public class CalculatorInterceptor : Interceptor
{
protected override void ExecuteBefore(Castle.DynamicProxy.IInvocation invocation)
{
Console.WriteLine("Start");
}
protected override void ExecuteAfter(Castle.DynamicProxy.IInvocation invocation)
{
Console.WriteLine("End");
}
}
но когда я использовал его НЕ РАБОТАЕТ !!!
static void Main(string[] args)
{
ProxyGenerator generator = new ProxyGenerator();
Calculator c = generator.CreateClassProxy<Calculator>(new CalculatorInterceptor());
var r = c.Add(11, 22);
Console.WriteLine(r);
Console.ReadKey();
}
Я освобожденный, чтобы увидеть что-то вроде этого:
START
33
END
но только показать
33
Как я могу это исправить?!
да, похоже, но вопрос в том, что результат: START END 33 Как я могу установить до и после правильно и посмотреть результат, как этот START 33 END, могу ли я исправить это в классе Interceptor для правильных методов вызова ??! !! – user3153878
@ user3153878 перехватчик выполняет прямо до и после вызова «Добавить», но вы записываете результат после этого в консоль (выполнить before -> выполнить Add -> execute after -> result result). Если вы создаете консоль вызовите метод 'Add', вы получите желаемый результат. –