Кто несет ответственность
Кто несет ответственность запустить и закончить Единицу работы в архитектуре MVC?
Контроллер не отвечает за это, это нарушает SRP . Контроллер вообще не должен знать о UoW. В сети обычно используется один UoW на запрос к серверу. В этом случае UoW должен быть удален в конце запроса и запущен где-то после начала запроса (в идеале запуск UoW должен быть ленивым). Лучшее место для этого - Global.asax (или ваш класс HttpApplication) с использованием обработчиков Application_EndRequest и Application_BeginRequest.
Этого можно легко достичь с помощью инфраструктуры IOC (мой любимый - Windsor), см. этот вопрос для подробностей реализации.
Как сказал zihotki, вы нарушите SRP, если передадите эту ответственность контроллеру. Это паттерн, ориентированный на манипулирование данными, и как таковой не должен быть заботой контроллера... это будет два нарушения: одно для SRP и другое для принципа SoC.
Что касается того, кто несет ответственность, это то, что должно быть определено вашей архитектурой. Предложение StartRequest/EndRequest кажется достаточно надежным.
Контроллер. Это получает контекст, поэтому вы можете начать и закончить единицу работы. Например, для сеанса nHibernate для каждого запроса вам необходимо знать, когда запрос был запущен и завершен, поэтому вам нужен контекст, чтобы передать вам запрос.