我正在使用NInject DI和存储库模式编写MVC3应用程序。 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吗?
我知道这里有很多关于这个问题的讨论,但它们似乎都涉及与我的情况不太相同的场景,所以很难将答案分开。