编写包含 A 类型异常并将其输出为 B 类型的 postsharp 方面。在某些情况下,这是常见的模式,因此这应该会删除大部分样板文件。问题是,使用激活器创建异常时如何设置内部异常?
namespace PostSharpAspects.ExceptionWrapping
{
[Serializable]
public class WrapExceptionsAttribute : OnMethodBoundaryAspect
{
private readonly Type _catchExceptionType;
private readonly Type _convertToType;
public WrapExceptionsAttribute(Type catchTheseExceptions, Type convertThemToThisType)
{
_catchExceptionType = catchTheseExceptions;
_convertToType = convertThemToThisType;
}
public override void OnException(MethodExecutionArgs args)
{
if (args.Exception.GetType() == _catchExceptionType)
{
throw (Exception) Activator.CreateInstance(_convertToType);
}
}
}
}
如果我尝试设置内部异常: throw (Exception) Activator.CreateInstance(_convertToType, args.Exception);
我收到 xxxx 类型异常没有为其定义构造函数的错误,如何解决这个问题?我是否必须使用某种反射技巧来编写私有字段?