我希望将
args.ReturnValue
设置为从调用Create
方法创建的TResponse<T>
对象的实例。[Serializable]
public sealed class LogError : OnMethodBoundaryAspect
{
public override void OnException(MethodExecutionArgs args)
{
// Logging part..
MethodInfo methodInfo = (MethodInfo)args.Method;
// I want to replace line below comment to get TResponse<T> object instead of dynamic if possible
dynamic returnValue = Activator.CreateInstance(methodInfo.ReturnType);
args.ReturnValue = returnValue.Create(CodeMessage.InternalError, MessageType.Error, args.Exception);
args.FlowBehavior = FlowBehavior.Return;
}
}
ReturnType
方法的返回值类型始终为TResponse<T>
,但我不知道如何根据方法返回类型创建TResponse<T>
的实例。 TResponse<T>
实现了具有以下签名的方法:
.Create(CodeMessage.InternalError, MessageType.Error, args.Exception);
Create
方法是一个静态方法,返回设置好参数的 TResponse<T>
对象。
因为我不知道如何实现我想要的功能,所以我使用 Activator
来创建方法返回类型的实例并将其存储到 dynamic
类型中,但当我调用 Create
方法时,它会抛出 RuntimeBinderException
异常。
methodInfo.ReturnType.GetConstructor(...).Invoke(...)
吗? - KeyNone