我正在使用Unity和Unity.Webforms引导程序实现依赖注入。我的webforms应用程序中有一个DbFactory初始化我的DbContext,我想为每个Web请求创建一个这个工厂的实例,以便我的各种服务将在同一工作单元下更新。
我的问题是,Unity.Webforms引导程序是否为我处理这个问题?我相信这个post中的答案建议执行以下操作,以便按请求完成单个上下文。
container.RegisterType<IDbFactory,DbFactory>(new HierarchicalLifetimeManager());
这是正确的,我需要做的就是这样吗?我担心它会为每个请求创建一个上下文,但它是一个应用程序范围的上下文(所有用户共享相同的上下文)。
这可能不是必需的,但以防万一,这是我的DbFactory的实现代码。
public class DbFactory : Disposable, IDbFactory
{
MyDbContext dbContext;
public MyDbContext Init()
{
return dbContext ?? (dbContext = new MyDbContext());
}
protected override void DisposeCore()
{
if(dbContext != null)
{
dbContext.Dispose();
}
}
}
public class Disposable : IDisposable
{
private bool isDisposed;
~Disposable()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if(!isDisposed && disposing)
{
DisposeCore();
}
isDisposed = true;
}
protected virtual void DisposeCore(){}
}