尝试在 IDistributedEventHandler 中使用 DBContext 时出现 ObjectDisposedException

ObjectDisposedException when trying to use the DBContext inside an IDistributedEventHandler

我有一个使用 IDistributedEventHandle 的 ABP 应用程序。在这些处理程序中,我想使用我们在应用程序中拥有的自定义存储库。该存储库继承自 Volo EfCoreRepository。但是,当执行事件处理程序时,我在主 DbContext 上得到 ObjectDisposedException。我假设这是因为它现在在 asp.net 主要范围之外使用。

 public class EventHander : IDistributedEventHandler<ClientCreatedEto>,
    ITransientDependency
{
    private readonly ICustomRepository _repository;


    public EventHander (ICustomRepository repo)
    {
        _repository= repo;
    }

    public async Task HandleEventAsync(ClientCreatedEto eventData)
    {
       //error here
    }
}

我也尝试依赖 IServiceProvider 声明新范围并以这种方式解析存储库,但我遇到了同样的异常。应如何在事件处理程序中解析应用程序的主要 DBContext?

可以尝试在HandleEventAsync方法中使用IUnitOfWorkManager创建工作单元,并在工作单元中使用repository。

using (var uow = _unitOfWorkManager.Begin())
{
    // your _repository method code.
    await uow.CompleteAsync();
}

或使用 [UnitOfWork] 属性。

[UnitOfWork]
public virtual async Task HandleEventAsync(ClientCreatedEto eventData)
{
   // your _repository method code.
}