【发布时间】:2020-05-03 12:46:30
【问题描述】:
我正在尝试通过指定缓存项过期时调用的 CacheEntryUpdateCallback 委托来使用 MemoryCache 实现自动刷新。 委托在我的存储库中调用一个方法:
public async Task<List<Foo>> GetFoos()
{
return await _dbContext.Foos.ToListAsync();
}
这会在回调中引发异常,因为上下文已经被释放(原来的 HttpRequest 早就返回了)
所以我尝试使用 Autofac 工厂来注入我的依赖项:
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,因为它已经被处理掉了。
我可以做些什么来解决这个问题?
【问题讨论】:
标签: c# asp.net dependency-injection autofac