Я пытаюсь реализовать автоматическое обновление sh с использованием MemoryCache, указав делегат CacheEntryUpdateCallback, который вызывается по истечении срока действия кэшированного элемента. Делегат вызывает метод в моем репозитории:
public async Task<List<Foo>> GetFoos()
{
return await _dbContext.Foos.ToListAsync();
}
Это вызывает исключение в обратном вызове, поскольку контекст уже удален (оригинальный HttpRequest давно вернулся)
Поэтому я попытался используя фабрику Autofa c, чтобы вместо этого внедрить мою зависимость:
public FooRepository(Func<<IFooContext> dbContextFactory)
{
_dbContextFactory = dbContextFactory;
}
public async Task<List<Foo>> GetFoos()
{
return await _dbContextFactory().Foos.ToListAsync();
}
Это дало мне другое исключение:
Экземпляры не могут быть разрешены, и из этого не могут быть созданы вложенные времена жизни LifetimeScope, как он уже был утилизирован.
А как насчет этой "Собственной" фабрики?
public FooRepository(Func<Owned<IFooContext>> dbContextFactory)
{
_dbContextFactory = dbContextFactory;
}
public async Task<List<Foo>> GetFoos()
{
using(var factory = _dbContextFactory())
{
return await factory.Value.Foos.ToListAsync();
}
}
Нет, та же проблема:
Экземпляры не могут быть решены, и вложенные времена жизни не могут быть созданы из этого LifetimeScope, поскольку он уже был удален.
Что я могу сделать, чтобы обойти эту проблему?