2013-03-20 124 views
0

我努力学习面向方面编程的概念,我使用城堡项目动态代理为。请参阅我写的示例代码。拦截器拦截不C#,城堡动态代理

拦截器似乎没有拦截?或者我没有在我的控制台窗口中看到“在调用之前的内部拦截器,”和“内部拦截器,在调用之后”。请建议我在这里做错了什么?

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