StructureMap is not disposing data context when using HttpContextScoped()

Viewed 4450

My goal is to have one data context (MainDbContext) per HTTP request in ASP.NET MVC and dispose the data context when the request ends.

I'm using the following StructureMap configuration:

public static class ContainerConfigurer
{
    public static void Configure()
    {
        ObjectFactory.Initialize(x =>
        {
            x.For<MainDbContext>().HttpContextScoped();
        });
    }
}

Whenever I need a MainDbContext, I'm using this code:

var dbContext = ObjectFactory.GetInstance<MainDbContext>();

This is working as expected: only one data context is being created per HTTP request. The problem is, MainDbContext is not being disposed at the end of the request.

How can I configure my ObjectFactory to dispose the data context when the HTTP request finishes? Or is this just something I need to do manually using Application_EndRequest() in Global.asax.

Update

I just tried adding the following code to Global.asax:

protected virtual void Application_EndRequest()
{
    ObjectFactory.GetInstance<MainDbContext>().Dispose();
}

As expected, this solves the problem. I'm still wondering if there's any way to do this automatically with StructureMap, however.

2 Answers
Related