/// <summary>
        /// Emite una respuesta en JSON de un error debido a validación
        /// </summary>
        /// <param name="response">Respuesta que se escribirá</param>
        /// <param name="error">Error de validación arrojado</param>
        /// <param name="errorMessageTranspiler">Transpilador de mensajes amigables a partir de errores</param>
        /// <returns></returns>
        private static async Task EmitValidationErrorResponse(
            HttpResponse response,
            ValidationErrorException error,
            ValidationErrorMessageTranspiler errorMessageTranspiler
            )
        {
            response.StatusCode = (int)HttpStatusCode.BadRequest;

            var errorMessage = errorMessageTranspiler.TranspileFriendlyMessage(error);

            await response.WriteAsync(
                JsonConvert.SerializeObject(
                    new ValidationErrorResponse(errorMessage)
                    )
                );
        }
        /// <summary>
        /// Se configura el manejador de excepciones de la aplicación
        /// Una de las tareas de este debe ser atrapar los errores de validaciones de las entidades que se intenten insertar o actualizar
        /// </summary>
        /// <param name="app"></param>
        public static void ConfigureExceptionHandler(this IApplicationBuilder app)
        {
            var validationErrorMessageTranspiler = new ValidationErrorMessageTranspiler();

            app.UseExceptionHandler(appError =>
            {
                appError.Run(async context =>
                {
                    // Ante errores, siempre se responderá con un JSON
                    context.Response.ContentType = "application/json";

                    var contextFeature = context.Features.Get <IExceptionHandlerFeature>();

                    // Si es una excepción de validación, se transpila una respuesta que contenga el error
                    if (contextFeature.Error is ValidationErrorException validationError)
                    {
                        await EmitValidationErrorResponse(
                            context.Response,
                            validationError,
                            validationErrorMessageTranspiler
                            );
                    }
                    else if (contextFeature.Error is RecordChildrenException childrenException)
                    {
                        var errorMessage = "No es posible eliminar, otro registro depende de él";

                        await context.Response.WriteAsync(
                            JsonConvert.SerializeObject(
                                new ValidationErrorResponse(errorMessage)
                                )
                            );
                    }
                    else
                    {
                        await EmitSystemUnhandledErrorResponse(
                            context.Response,
                            contextFeature.Error as Exception
                            );
                    }
                });
            });
        }