Ваш контроллер должен выглядеть примерно так:
[HttpPost]
public ActionResult SubmitOrder(Order o)
{
try
{
repository.Add(o);
unitOfWork.Commit();
}
catch (YourCustomExceptionClass exc)
{
ModelState.AddError(exc.ToString());
}
return View();
}
unitOfWork должен быть объявлен на уровне контроллера как:
IUnitOfWork unitOfWork;
И вводится в ctor контроллера - предпочтительно с DI на HTTP-запрос.
Если подумать - единицей работы в контексте веб-приложения обычно является HTTP-запрос.
А HTTP-запрос направлен только на один метод действия для выполнения работы. Конечно, у вас есть шаблон PRG (перенаправление на действие HttpGet впоследствии), но для каждого HTTP-запроса должен быть только 1 [HttpPost]
вызов действия.
Поэтому имеет смысл зафиксировать UoW на уровне метода действия.
У вас должно быть две реализации IUnitOfWork:
- EntityFrameworkUnitOfWork : IUnitOfWork
- InMemoryUnitOfWork : IUnitOfWork
Так что при модульном тестировании - просто введите InMemoryUnitOfWork (который фиксирует изменения в статический List<T>
, например)