因此,我试图用HotChocolate 12.5.2记录错误,我想知道拦截这些错误的最佳位置。阅读hotchocolate,我发现接口IErrorFilter有一个OnError方法,每次发生错误时都会调用它,但是它的实现是单例的。是否有某个地方可以截取此错误,或者是否有方法将我的作用域服务注入到一个记录错误的范围内?
我可以拦截和个性化我的错误,但我不能注入我的服务。我只想知道这里是否是拦截错误的最佳地点,以及在这里记录错误的最佳实践。
这就是我想要的:
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的泛型类,是一个作用域服务。
发布于 2022-11-14 16:21:38
尝试注入IServiceScopeFactory,而不是注入作用域依赖项,并在OnError处理程序中创建作用域和解析依赖关系:
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
}
}
}https://stackoverflow.com/questions/74434620
复制相似问题