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