Я пишу приложение MVC3, используя NInject DI и шаблон репозитория.Ninject настроен таким образом, чтобы у репозиториев было время жизни каждого запроса.
Я помещаю объект контекста в объект запроса Http, используя следующий код:
public static MessengerEntities GetContext()
{
if (!HttpContext.Current.Items.Contains("_db_context"))
{
HttpContext.Current.Items.Add("_db_context", new MessengerEntities());
}
return (MessengerEntities)HttpContext.Current.Items["_db_context"];
}
Затем каждый репозиторийвызывает эту процедуру для получения существующего или нового объекта контекста, например:
public class TestRepository : ITestRepository
{
private MessengerEntities context = ContextHelper.GetContext();
#region ITestRepository Members
private string _testProperty = "blah";
public string testProperty
{
get
{
_testProperty = context.UserLogins.Where(n => n.inactive == null || !n.inactive.Value).ToList().Count.ToString();
return _testProperty;
}
set
{
_testProperty = value;
}
}
#endregion
}
(Позже я планирую использовать общий шаблон IRepository, но сейчас я просто использую этот тестовый репозиторий.)
Мой вопрос таков: когда объект Request удаляется, он также удаляет объект контекста в коллекции Items?Другими словами, будет ли он вызывать Dispose для каждого объекта, который может храниться в этой коллекции?
Я знаю, что здесь много дискуссий по этому вопросу, но все они, похоже, включают сценарии, которые не совсемтак же, как и у меня, поэтому довольно сложно угадать ответ.