我正在尝试学习面向方面编程的概念,我正在使用城堡项目动态代理。请参阅我编写的示例代码。
拦截器似乎没有拦截?或者我在控制台窗口中没有看到“内部拦截器,呼叫前”和“内部拦截器,呼叫后”。请在这里建议我做错了什么?
class AOP
{
static void Main(string[] args)
{
ProxyGenerator generator = new ProxyGenerator();
actual logger = generator.CreateClassProxy<actual>(new proxyforactual());
logger.add(3, 2);
}
}
public class proxyforactual : IInterceptor
{
public void Intercept(IInvocation invocation)
{
Console.WriteLine("Inside interceptor, before the call");
invocation.Proceed();
Console.WriteLine("Inside interceptor, after the call");
}
}
public class actual
{
public int add(int x, int y)
{
Console.WriteLine("Inside method");
return x + y;
}
}
答案 0 :(得分:2)
我的不好,仔细查看“CreateClassProxy”方法签名后,我注意到代理只会拦截虚方法。改变了我的代码如下所示,现在工作正常。
谢谢大家。
public virtual int add(int x, int y)
{
Console.WriteLine("Inside method");
return x + y;
}
答案 1 :(得分:0)
尝试使用界面并从中派生您的类和代理。