Мы создаем сайт ASP.NET MVC, и я пытаюсь определить, где определить соединение, чтобы лучше включить модульное тестирование (я использую «соединение» в общем - это может быть сеанс, соединение, адаптер или любой другой тип контекста данных, который может управлять транзакциями и операциями с базой данных).
Допустим, у нас есть 3 класса:
UserController
UserService
UserRepository
В прошлом мы делали что-то подобное в методе UserService:
Using (ISomeSession session = new SomeSession())
{
session.StartTransaction();
IUserRepository rep = new UserRepository(session);
rep.DoSomething();
rep.Save();
session.Commit();
}
Однако на самом деле не было возможности провести модульное тестирование, так как зависимость от SomeSession не была введена. Однако, если мы используем Д.И. чтобы внедрить зависимость в UserService, сеанс висит на протяжении всей жизни UserService. Если есть несколько сервисов, вызываемых из UserController, у каждого из них могут быть сессии, просто зависающие до тех пор, пока UserController не будет собирать мусор.
Есть мысли о том, как лучше справиться с этим? Я что-то упускаю из виду?
Редактировать
Извините, если мне было непонятно - я понимаю, что могу использовать внедрение зависимостей с контекстом сеанса / данных, но тогда оно сохраняется в течение всего срока службы класса Service. Для любых более длительных действий / методов (т. Е., Скажем, служба вызывается пакетным процессом), это может привести к большому количеству открытых сессий только по причине добавления тестируемости.