我應該在Asp.Net MVC應用程序的UnitOfWork上調用Commit()
?仍然保持我的控制器單元可測試。哪裏可以在Asp.Net MVC應用程序中調用UnitOfWork.Commit()
我使用HttpModule嗎?創建一個基礎控制器並使用OnActionExecuted
?或Global.asax:Application_EndRequest()
?
我應該在Asp.Net MVC應用程序的UnitOfWork上調用Commit()
?仍然保持我的控制器單元可測試。哪裏可以在Asp.Net MVC應用程序中調用UnitOfWork.Commit()
我使用HttpModule嗎?創建一個基礎控制器並使用OnActionExecuted
?或Global.asax:Application_EndRequest()
?
你的控制器看起來應該是這樣的:
[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的兩種實現方式:
所以,當單元測試 - 只是注入InMemoryUnitOfWork(其中提交c例如,變成一個靜態的List<T>
)
聽起來你的UI應該發送commit
調用給域控制器,然後該域控制器應該將該調用傳遞到域層中的相關方。