1

我正在尝试学习面向方面编程的概念,并且我正在为此使用城堡项目动态代理。请参阅我编写的示例代码。

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

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

2 回答 2

2

我的错,在仔细查看“CreateClassProxy”方法签名后,我注意到代理只会拦截虚拟方法。像下面这样更改了我的代码,现在一切正常。

谢谢大家。

public virtual int add(int x, int y)
    {
        Console.WriteLine("Inside method");

        return x + y;
    }
于 2013-03-20T16:18:59.447 回答
0

尝试使用接口并从中派生您的类和代理。

于 2013-03-20T16:17:54.500 回答