Код выглядит нормально, но вы не показали, как регистрируется перехват и как вызывается объект.
Если предположить, что перехват вызывается, то, если бы я догадался, это вызвало бы то, что вызванный метод возвращает тип значения, а IMethodReturn.ReturnValue
является нулевым, что вызывает NullReferenceException
.
Если это так, то, возможно, возврат значения по умолчанию для типа значения решит вашу проблему:
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{
Console.WriteLine(string.Format("Invoke method:{0}", input.MethodBase.ToString()));
IMethodReturn result = getNext()(input, getNext);
if (result.Exception == null)
{
Console.WriteLine("Invoke successful!");
}
else
{
Console.WriteLine(string.Format("Invoke faild, error: {0}", result.Exception.Message));
result.Exception = null;
Type type = ((MethodInfo)input.MethodBase).ReturnType;
if (type.IsValueType)
{
result.ReturnValue = Activator.CreateInstance(type);
}
}
return result;
}