城堡接口代理没有目标

时间:2013-12-12 14:57:22

标签: c# castle-dynamicproxy

我正在尝试为没有目标的接口创建代理,当我在生成的代理上调用方法时,我总是得到System.NullReferenceException,但拦截器总是很好调用

这是界面和拦截器的定义:

internal class MyInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
            Console.WriteLine(invocation.Method.Name);
    }
}

public interface IMyInterface
{
    int Calc(int x, int y);
    int Calc(int x, int y, int z);
}

这是主程序:

class Program
{
    static void Main(string[] args)
    {
        ProxyGenerator generator = new ProxyGenerator();

        IMyInterface proxy = (IMyInterface) generator.CreateInterfaceProxyWithoutTarget(
            typeof(IMyInterface), new MyInterceptor());

        proxy.Calc(5, 7);
    }
}

调用拦截器,但我从DynamicProxyGenAssembly2中获得异常。为什么呢?

1 个答案:

答案 0 :(得分:0)

问题在于Calc方法的返回类型是原始Int32。一旦你没有在拦截器中指定返回的值,它就会返回null,因此,当代理尝试将该值转换为Int32时,它将抛出NullPointerException

要解决此问题,您应该在intercept方法中设置返回值,例如invocation.ReturnValue = 0;