2

如何自動處理實現IDisposable的類,該類是通過DI使用Unity作爲IoC創建的?使用Unity時,您如何自動處置IDisposable?

例如,假設我有以下各層的MVC應用程序:

  1. MVC
  2. 服務
  3. 庫(實現工作模式的單位爲CRUD操作實體框架)

A UnitOfWork存儲庫層中的類實現IDisposable接口,並通過Unity使用DI注入服務層。除非我失去了一些東西,而不會自動配置的UnitOfWork類,你需要通過堆棧覆蓋調用服務(這也需要實現IDisposable)控制器上的Dispose()方法,和氣泡,直到你在到達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(); 
    } 
} 

This thread表明它不被支持? 「只有少數情況下Unity會處理一個實例,它確實不受支持」Unity 3.0中的情況仍然如此。

回答

1

如果您使用的是Unity bootstrapper for ASP.NET MVC的PerRequestLifetimeManager,那麼在HTTP請求結束時,UnityPerRequestHttpModule將處理所有使用PerRequestLifetimeManager註冊的實現IDisposable的對象。