我正在尝试为没有目标的接口创建代理,当我在生成的代理上调用方法时,我总是得到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中获得异常。为什么呢?
答案 0 :(得分:0)
问题在于Calc
方法的返回类型是原始Int32
。一旦你没有在拦截器中指定返回的值,它就会返回null
,因此,当代理尝试将该值转换为Int32
时,它将抛出NullPointerException
。
要解决此问题,您应该在intercept
方法中设置返回值,例如invocation.ReturnValue = 0;