CastleDynamic代理:调用代理方法时的NullReferenceException

时间:2011-11-23 12:08:08

标签: c# castle-dynamicproxy

我使用 StructureMap 来创建一个接口实例,然后用 Castle DynamicProxy 将其包装到代理中:

var proxy = generator.CreateInterfaceProxyWithTarget<T>(
    ObjectFactory.GetInstance<T>()
    , new SwitchInterceptor(isGranted, foundUser));

IInterceptor类型的拦截器中,我已经得到了这段代码:

public override void Intercept(IInvocation invocation)
{
    if (this.CanExecute)
    {
        invocation.Proceed();
    }
}

当CanExecute为true时,它始终有效,但有时当CanExecute为false时,我有一个奇怪的NullReferenceException,真的很小堆栈跟踪:

at Castle.Proxies.IGrantedReadProxy.ExecuteSomething()

我真的迷路了,我不知道在哪里看。你对这个问题有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我认为问题是返回类型是不可为空的值类型(例如int)。在这种情况下,null具有的invocation的默认返回值不适用。你也不要通过调用invocation.Proceed()来设置它,所以你必须以另一种方式设置它。

在这些情况下,您必须明确设置invocation.ReturnValue。另一个选择是抛出一个更具信息性的例外。