I'm current writing a Windows Service which connects to an existing service layer using Entity Framework (DbContext), and Ninject to inject the Respositories and DbContext instance. This is pretty much working with one caveat - I want a brand new DbContext instance each time the thread runs, whereas at the moment I'm getting the same one for the entire thread lifetime.
My binding looks like this:
Bind<IDbContext>().To<EnterpriseDbContext>().InThreadScope();
Bind<IUserRepository>().To<UserRepository>().InThreadScope();
// And other repositories
And my thread code looks like this:
[Inject]
public IDbContext DbContext { get; set; }
// Execute indefinitely (or until we've stopped)
while (true && !isStopping)
{
try
{
// Do work.
// Save any changes.
DbContext.SaveAnyChanges();
}
catch (Exception ex)
{
// Handle exception
HandleException(ex);
}
// Sleep
Thread.Sleep(sleepInterval);
}
Now I know I can change the scope to InTransientScope(), etc - however I'm still fairly new to Ninject, and I'm not really sure how best to organise the code to use a new DbContext instance each time.
Has anyone ever done anything similar? In the web app, we have InRequestScope() which works perfectly - but I'm not really sure of the best approach here on how to use the DbContext in the Windows Service.