C# CastleDynamic代理:调用代理的方法时发生NullReferenceException

C# CastleDynamic代理:调用代理的方法时发生NullReferenceException,c#,castle-dynamicproxy,C#,Castle Dynamicproxy,我使用StructureMap创建接口实例,并使用Castle DynamicProxy将其包装到代理中: 当CanExecute为true时,它始终有效,但当CanExecute为false时,有时会出现一个奇怪的NullReferenceException,堆栈跟踪非常小: at Castle.Proxies.IGrantedReadProxy.ExecuteSomething() 我真的迷路了,不知道该去哪里找。你知道问题是什么吗?我认为问题在于返回类型是不可为空的值类型(例如,int)

我使用StructureMap创建接口实例,并使用Castle DynamicProxy将其包装到代理中:

当CanExecute为
true
时,它始终有效,但当CanExecute为
false
时,有时会出现一个奇怪的
NullReferenceException
,堆栈跟踪非常小:

at Castle.Proxies.IGrantedReadProxy.ExecuteSomething()

我真的迷路了,不知道该去哪里找。你知道问题是什么吗?

我认为问题在于返回类型是不可为空的值类型(例如,
int
)。在这种情况下,
invocation
的默认返回值
null
不适用。您也不能通过调用
invocation.procedure()
来设置它,因此您必须以另一种方式进行设置


在这些情况下,必须显式设置
invocation.ReturnValue
。另一个选项是抛出信息更丰富的异常。

这正是问题所在:如果
CanExecute
false
,我将
invoker.ReturnValue
设置为返回类型的默认值。它是有效的。非常感谢你!
public override void Intercept(IInvocation invocation)
{
    if (this.CanExecute)
    {
        invocation.Proceed();
    }
}
at Castle.Proxies.IGrantedReadProxy.ExecuteSomething()