Я думаю, что вы ищете шаблон Единица работы , где время жизни транзакции контролируется единицей работы, которую вы вводите в хранилища / службы.
См. этот ответ для примера реализации UoW с NHibernate и StructureMap.
Редактировать:
При условии, что вы реализовали Единицу работы иуниверсальный репозиторий вы бы в основном использовали их:
1) Отображение их в карте структуры:
c.For(typeof(IRepository<>)).Use(typeof(Repository<>));
c.For<IUnitOfWork>().Use<UnitOfWork>();
2) Принятие Контроллером Репозитория (или Сервиса, инкапсулирующего репозиторий; этот подходчасто является предпочтительным), а UnitOfWork:
public class MyController
{
public MyController(IRepository<MyEntity> repository, IUnitOfWork uow)
{
_repository = repository;
_unitOfWork = uow;
}
}
Это, конечно, также требует, чтобы вы создали пользовательскую ControllerFactory .
3) Использование единицы работы иРепозиторий в действии контроллера:
public ViewResult MyAction(MyEntity entity)
{
_repository.Save(entity);
_unitOfWork.Commit();
return View();
}