【发布时间】:2013-10-01 13:45:50
【问题描述】:
如何使用 Unity 作为 IoC 自动处置通过 DI 新增的实现 IDisposable 的类?
例如,假设我有一个包含以下层的 MVC 应用程序:
- MVC
- 服务
- 存储库(为 CRUD 操作实现工作单元模式的实体框架)
存储库层中的UnitOfWork 类实现IDisposable 接口,并通过Unity 使用DI 注入服务层。除非我遗漏了什么,否则在不自动处理 UnitOfWork 类的情况下,您需要覆盖调用服务的控制器上的 Dispose() 方法(也需要实现 IDisposable),然后在堆栈中冒泡,直到您到达UnitOfWork 上的Dispose() 方法(如果您没有使用工作单元模式,则访问相应的存储库)。
例如
// controller
protected override void Dispose(bool disposing)
{
if (_serviceLayer != null)
{
_serviceLayer.Dispose();
}
base.Dispose(disposing);
}
// service layer
public override Dispose() {
if (_uow != null)
{
_uow.Dispose();
}
}
// unit of work
public void Dispose() {
if (_context != null)
{
_context.Dispose();
}
}
This thread 表示不支持? “只有少数情况下 Unity 会处理实例。确实不支持” Unity 3.0 仍然如此。
【问题讨论】:
标签: entity-framework inversion-of-control unity-container unit-of-work