我问这个问题的原因是因为
例如:
页面:
当然,我会检查 null 并执行必要的步骤来获取 DataContext,如果它在 HttpContext.Current.Items 集合中不可用。
所以,回到我的原始问题,考虑上述代码:即使抛出异常,HttpContext.Current 中包含的任何对象及其 Items 集合是否都会被处理?
HttpContext.Current.Items
集合似乎是一个很好的放置IDisposable
对象(如DataContext
)的地方,这样仓储库就可以透明地访问它,而不必向仓储库注入与特定ORM技术相关的任何依赖项。这还允许存储库决定是否参与UnitOfWork
或承担实际持久化任何更改的额外责任。例如:
页面:
protected void Page_Load(...)
{
Items[KeyValueFromConfigurationFile] = new DataContext();
var repo = new Repository();
var rootEntity = repo.GetById(1);
}
代码仓库:
public virtual TEntity GetById(int id)
{
var ctx = HttpContext.Current.Items[KeyValueFromConfigurationFile] as DataContext;
return ctx.TEntities.SingleOrDefault(p => p.Id == id);
}
当然,我会检查 null 并执行必要的步骤来获取 DataContext,如果它在 HttpContext.Current.Items 集合中不可用。
所以,回到我的原始问题,考虑上述代码:即使抛出异常,HttpContext.Current 中包含的任何对象及其 Items 集合是否都会被处理?
foreach (var v in HttpContext.Current.Items.Values.OfType<IDisposable>()) v.Dispose();
- Denis