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