使用Unity,如何自动处理IDisposable对象的释放?

3
如何使用Unity作为IoC来自动处理实现了IDisposable接口的类?例如,假设我有一个MVC应用程序,其中包括以下层级结构:
1. MVC 2. Service 3. Repository(使用Entity Framework实现CRUD操作的工作单元模式)
仓储层中的UnitOfWork类实现了IDisposable接口,并通过依赖注入(DI)通过Unity注入到服务层。除非我漏掉了什么,否则如果不自动处理UnitOfWork类的处理,您需要在调用服务的控制器上重写Dispose()方法(该方法也需要实现IDisposable),并一直上溯到达到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();
    }
}

这个帖子表明Unity不支持处理IDisposable类型的实例:"只有极少数情况下,Unity才会处置一个实例。这真的是不受支持的",那么在Unity 3.0中是否仍然如此?

1个回答

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

我无法在使用简单接口和实现时触发dispose方法,这两者都实现了IDisposable,并且在注册类型时与PerRequestLifetimeManager结合使用。这仍然有效吗? - Murphybro2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接