Невозможно создать Generi c класс типа System.Fabri c .FabricServiceNotFoundException при использовании c# отражения - PullRequest
0 голосов
/ 30 марта 2020

У меня есть следующая функция, которая принимает ошибку и создает экземпляр класса 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, и я не понимаю или не имею понятия, почему. Если бы кто-нибудь мог помочь с этим, был бы очень признателен

1 Ответ

0 голосов
/ 30 марта 2020

Так что, благодаря @ 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);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...