EDIT
У меня есть некоторые проблемы с этим некоторое время назад, но теперь, похоже, работает:
Bind<CamelTrapEntities>().To<CamelTrapEntities>().Using<OnePerRequestBehavior>();
Вместо использования HttpModule можно использовать OnePerRequestBehavior, и он позаботится об обработке контекста в текущем запросе.
РЕДАКТИРОВАТЬ 2
OnePerRequestBehavior необходимо зарегистрировать в web.config, поскольку он также зависит от HttpModule:
В IIS6:
<system.web>
<httpModules>
<add name="OnePerRequestModule" type="Ninject.Core.Behavior.OnePerRequestModule, Ninject.Core"/>
</httpModules>
</system.web>
С IIS7:
<system.webServer>
<modules>
<add name="OnePerRequestModule" type="Ninject.Core.Behavior.OnePerRequestModule, Ninject.Core"/>
</modules>
</system.webServer>
ПРЕДЫДУЩИЙ ОТВЕТ
Вы несете ответственность за удаление контекста, когда он не нужен. Самый популярный способ в ASP.NET - иметь один ObjectContext на запрос. Я делаю это, имея HttpModule:
public class CamelTrapEntitiesHttpModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest += ApplicationBeginRequest;
application.EndRequest += ApplicationEndRequest;
}
private void ApplicationEndRequest(object sender, EventArgs e)
{
((CamelTrapEntities) HttpContext.Current.Items[@"CamelTrapEntities"]).Dispose();
}
private static void ApplicationBeginRequest(Object source, EventArgs e)
{
HttpContext.Current.Items[@"CamelTrapEntities"] = new CamelTrapEntities();
}
}
Это правило инъекции:
Bind<CamelTrapEntities>().ToMethod(c => (CamelTrapEntities) HttpContext.Current.Items[@"CamelTrapEntities"]);
Мой репозиторий принимает ObjectContext в конструкторе:
public Repository(CamelTrapEntities ctx)
{
_ctx = ctx;
}