3

您如何IDisposable使用 Unity 作为 IoC 自动处置通过 DI 新增的实现类?

例如,假设我有一个具有以下层的 MVC 应用程序:

  1. MVC
  2. 服务
  3. 存储库(为 CRUD 操作实现工作单元模式的实体框架)

存储库层中的一个UnitOfWork类实现IDisposable接口,并通过 Unity 使用 DI 注入服务层。除非我遗漏了某些东西,否则在不自动处理UnitOfWork类的情况下,您需要覆盖Dispose()调用服务的控制器上的方法(也需要实现IDisposable),并在堆栈中冒泡,直到您到达(或相应的)Dispose()上的方法UnitOfWork如果您没有使用工作单元模式,则存储库)。

例如

// 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();
    }
}

该线程表明它不受支持?“只有少数情况下 Unity 会处理实例。它真的不受支持” Unity 3.0 仍然如此。

4

1 回答 1

1

如果您为 ASP.NET MVC的 PerRequestLifetimeManager 使用 Unity 引导程序,那么在 HTTP 请求结束时,UnityPerRequestHttpModule 将处理所有注册到实现 IDisposable 的 PerRequestLifetimeManager 的对象。

于 2013-10-01T14:56:57.627 回答