I am implementing dependency injection using Unity and the Unity.Webforms bootstrapper. I have a DbFactory in my webforms application which initializes my DbContext, and I am wanting to create one instance of this factory per web request, so that my various services will update under the same unit of work.
My question is, does the Unity.Webforms bootstrapper take care of this for me? I believe the answer in this post is suggesting doing the following in order accomplish a single context per request.
container.RegisterType<IDbFactory,DbFactory>(new HierarchicalLifetimeManager());
Is this correct, and is it all I need to do? I'm worried that it is creating a single context per request, but that it is an application wide context (all users sharing the same context).
This probably isn't necessary, but just in case, here is the implementation code for my 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(){}
}