我具有以下函数,该函数会出错并创建ErrorType<T>
的类实例
private dynamic GenerateDynamicErrorHandler(Exception ex)
{
try
{
string typeName = ex.GetType().FullName;
Type typeArgument = Type.GetType(typeName);
Type genericClass = typeof(ErrorType<>);
Type constructedClass = genericClass.MakeGenericType(typeArgument);
dynamic created = Activator.CreateInstance(constructedClass);
return created;
}
catch
{
throw new ReflectionException(ex.GetType().FullName);
}
}
然后在下面的代码片段中返回dynamic
对象:
try
{
dynamic c = GenerateDynamicErrorHandler(ex);
if (c.IsError())
{
return c.GenericResponse<ErrorDetails,AppendingErrors>(isDebug,
isDefaultConverter,
context,
_errorDetailResponseFactory.CreateDefaultError(ex.Message,ex.InnerException,context.Response.StatusCode),
new AppendingErrors
{
Title = c.Get().Title,
ResultCode = c.Get().ResultCode,
StackTrace = ex.StackTrace
});
}
return HandleError.WithDefaultJsonConverter<ErrorDetails>(context,
_errorDetailResponseFactory.CreateDefaultError(ex.Message,ex.InnerException,context.Response.StatusCode));
}
catch(ReflectionException re)
{
return HandleError.WithGenericApendingJsonConverter<ErrorDetails, object>(context,
_errorDetailResponseFactory.CreateDefaultError(ex.Message, ex.InnerException, context.Response.StatusCode),
new {
reflectionError = re.Message
});
}
这适用于除System.Fabric.FabricServiceNotFoundException
以外的所有例外情况,我不理解或不知道原因。如果有人可以协助您,将不胜感激
因此,感谢@ Flydog57,问题实际上是获取类型的名称,然后尝试根据该名称创建类型。如评论中所述,简单的解决方法是仅使用
中传递的异常类型private dynamic GenerateDynamicErrorHandler(Exception ex)
{
try
{
Type typeArgument = ex.GetType();
Type genericClass = typeof(ErrorType<>);
Type constructedClass = genericClass.MakeGenericType(typeArgument);
dynamic created = Activator.CreateInstance(constructedClass);
return created;
}
catch(Exception e)
{
throw new ReflectionException(ex.GetType().FullName);
}
}