首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有作用域服务的Hotchocolate错误

具有作用域服务的Hotchocolate错误
EN

Stack Overflow用户
提问于 2022-11-14 16:09:47
回答 1查看 33关注 0票数 3

因此,我试图用HotChocolate 12.5.2记录错误,我想知道拦截这些错误的最佳位置。阅读hotchocolate,我发现接口IErrorFilter有一个OnError方法,每次发生错误时都会调用它,但是它的实现是单例的。是否有某个地方可以截取此错误,或者是否有方法将我的作用域服务注入到一个记录错误的范围内?

我可以拦截和个性化我的错误,但我不能注入我的服务。我只想知道这里是否是拦截错误的最佳地点,以及在这里记录错误的最佳实践。

这就是我想要的:

代码语言:javascript
复制
    public class CustomErrorFilter : IErrorFilter
    {
        private readonly IBaseService _service;
        private readonly IHttpContextAccessor _accessor;

        public CustomErrorFilter(IBaseService service, IHttpContextAccessor accessor)
        {
            _service = service;
            _accessor = accessor;
        }

        public IError OnError(IError error)
        {
            if (error.Exception is not null)
                return error.WithMessage(error.Exception.Message);

            _service.Add<Log, LogViewModel>(new LogViewModel()
            {
                Message= error.Message,
            }, _accessor.HttpContext.User);

            return error;
        }
    }

IBaseService是访问我的应用程序DbContext的泛型类,是一个作用域服务。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-14 16:21:38

尝试注入IServiceScopeFactory,而不是注入作用域依赖项,并在OnError处理程序中创建作用域和解析依赖关系:

代码语言:javascript
复制
public class CustomErrorFilter : IErrorFilter
{
   private readonly IServiceScopeFactory _scopeFactory; 
   //...
   public CustomErrorFilter(IServiceScopeFactory scopeFactory, IHttpContextAccessor accessor)
   {
        _scopeFactory = scopeFactory;
        _accessor = accessor;
   }

   public IError OnError(IError error)
   {
        using (var scope = _serviceScopeFactory.CreateScope())
        {
            var service = scope.ServiceProvider.GetRequiredService<IBaseService>(); 
            // use service
        }
   }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74434620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档