编写postharp方面的包装类型异常并将其输出为B类型。在某些情况下这是常见的模式,所以这应该删除相当多的样板。问题是,如何在使用激活器创建异常时设置内部异常?
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类型异常没有为它定义构造函数,如何解决这个问题?我是否必须使用某种反射技巧来编写私有字段?
答案 0 :(得分:0)
使用Type.GetConstructor(Type [])来获取适当的Exception构造函数。 http://msdn.microsoft.com/en-us/library/h93ya84h.aspx
这样的事情:
throw (Exception)_convertToType
.GetConstructor(new Type[]{ typeof(string), typeof(Exception) })
.Invoke(new object[]{ _catchExceptionType });