System.ObjectDisposeException: экземпляры не могут быть разрешены, и
вложенные сроки жизни не могут быть созданы из этого LifetimeScope, поскольку он (илиодна из родительских областей) уже удалена
Упрощенная версия моего кода:
Код: Выделить всё
// MainLogic.cs (registered as Transient)
private readonly IDateTimeProvider _dateTimeProvider; // Registered as Singleton
private readonly IMediator _mediator; // Registered with Autofac, which defaults to transient
public MainLogic(IDateTimeProvider dateTimeProvider, IMediator mediator)
{
_dateTimeProvider = dateTimeProvider;
_mediator = mediator;
}
public async Task[*]> MainProcessingLogic(string key, List listOfItems, DateTime dateTime)
{
try
{
var myVar = (await _mediator.Send(new ProcessSomeQuery(key, listOfItems, dateTime))).FirstOrDefault();
}
catch (Exception ex)
{
_logger.LogError("ProcessSomeQuery ran into an error : " + ex);
}
try
{
var myVar = await _mediator.Send(new ProcessSomeOtherDifferentQuery(key, listOfItems, dateTime));
}
catch (Exception ex)
{
_logger.LogError("ProcessSomeOtherDifferentQuery ran into an error : " + ex);
}
...some other code
}
Код: Выделить всё
private readonly IMyDataBaseContext _myDatabaseContext;
private readonly ILogger
_logger;
public ProcessSomeQueryHandler(IMyDataBaseContext myDatabaseContext, ILogger logger)
{
_myDatabaseContext = myDataBaseContext;
_logger = logger;
}
Код: Выделить всё
private readonly ILogger
_logger;
public ProcessSomeOtherDifferentQueryHandler(ILogger logger)
{
_logger = logger;
}
- Только второй вызов посредника приводит к ошибка. Если я поменяю порядок ProcessSomeQuery и ProcessSomeOtherDifferentQuery, так что ProcessSomeOtherDifferentQuery теперь будет первым вызовом посредника, а ProcessSomeQuery станет вторым вызовом посредника, тогда ProcessSomeQuery сейчас произойдет сбой.
- Если я заменю ProcessSomeOtherDifferentQuery на ProcessSomeQuery так, что у меня будет два вызова посредника для ProcessSomeQuery< /code>, при втором вызове все равно выдаст ту же ошибку.
- Обратите внимание, что только зависимость ProcessSomeQuery вводит контекст базы данных. ProcessSomeOtherDifferentQuery только внедряет регистратор. Это приводит к ошибке. Если обе зависимости внедряют контекст базы данных, все равно только второй вызов посредника завершается неудачей.
- Я пробовал менять области действия во всех видах конфигураций, к сожалению, не повезло.
- Если я удалю внедрение контекста базы данных из ProcessSomeQuery, это не приведет к ошибке.
Код: Выделить всё
services.AddTransient();
services.AddSingleton();
IMediator is registered with Autofac which defaults to Transient, I believe
MyDataBaseContext is registered with autofac which defaults to Transient
Подробнее здесь: https://stackoverflow.com/questions/787 ... e-using-au