尝试在 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.
}
我有一个使用 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.
}