2010-12-16 91 views

回答

4

你的控制器看起來應該是這樣的:

[HttpPost] 
public ActionResult SubmitOrder(Order o) 
{ 
    try 
    { 
     repository.Add(o); 
     unitOfWork.Commit(); 
    } 
    catch (YourCustomExceptionClass exc) 
    { 
     ModelState.AddError(exc.ToString()); 
    } 

    return View(); 
} 

的UnitOfWork應該在控制器級別聲明:

IUnitOfWork unitOfWork; 

並注入到控制器的構造函數 - 最好用DI每個HTTP請求。

當您考慮它時 - Web應用程序環境中的工作單元通常是HTTP請求。

而HTTP請求僅指向一個動作方法來執行工作。當然,你有PRG模式(之後重定向到HttpGet動作) - 但每個HTTP請求應該只有1個[HttpPost]動作調用。

因此,在操作方法級別提交UoW是有意義的。

你應該有IUnitOfWork的兩種實現方式:

  • EntityFrameworkUnitOfWorkIUnitOfWork
  • InMemoryUnitOfWorkIUnitOfWork

所以,當單元測試 - 只是注入InMemoryUnitOfWork(其中提交c例如,變成一個靜態的List<T>

0

聽起來你的UI應該發送commit調用給域控制器,然後該域控制器應該將該調用傳遞到域層中的相關方。

相關問題