我正在编写一个 MVC3 应用程序,使用 NInject DI 和存储库模式。Ninject 设置为使存储库具有每个请求的生命周期。
我使用以下代码将上下文对象放入 Http Request 对象中:
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 吗?
我知道这里有很多关于这个问题的讨论,但它们似乎都涉及与我不太相同的场景,所以很难预测答案。