Скажем, у меня есть следующие 4 сборки .net:
- Winforms UI
- Бизнес-логика
- Доступ к данным SQL Server (реализация IRepository)
- Общие интерфейсы (определение IRepository и т.д.)
Моя бизнес-логика (2) выполняет вызовы на уровень доступа к данным (3) через IRepository (определенный в 4), используя инъекцию зависимости конструктора. Однако, когда я завершаю бизнес-объект, мне нужно передать в реальный репозиторий. Я делаю это, если один класс singleton в моем бизнес-логическом слое возвращает используемый в настоящее время конкретный объект, реализующий IRepository. Я прихожу к выводу, что это плохо, поскольку мой уровень бизнес-логики теперь должен ссылаться на 3, а также на 4.
Я думаю, что мне нужен контейнер IoC, но вопрос в том, где я создаю/ставил его, как кажется, где бы я ни создавал этот (1 - UI)? также необходимо будет содержать ссылку на 3 (SQL Server Data Access). Разве я не просто перехожу к проблеме, а не к фактической развязке?
Создать контейнер IoC в пользовательском интерфейсе. Или выставить его через новую сборку.
(Я использую С#,.net 3.5 и AutoFac)
Спасибо.