使用c#反射时无法创建类型为System.Fabric.FabricServiceNotFoundException的泛型类

问题描述 投票:0回答:1

我具有以下函数,该函数会出错并创建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以外的所有例外情况,我不理解或不知道原因。如果有人可以协助您,将不胜感激

c# azure .net-core reflection azure-service-fabric
1个回答
0
投票

因此,感谢@ 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);
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.