Преимущества DI, насколько мне известно, следующие:
- Уменьшенные зависимости
- Код многократного использования
- Более проверяемый код
- Более читаемый код
Скажем, у меня есть репозиторий OrderRepository, который действует как репозиторий для объекта Order, сгенерированного с помощью Linq to Sql dbml. Я не могу сделать свой общий репозиторий заказов, поскольку он выполняет сопоставление между объектом Linq Order и моим собственным классом домена POCO заказа.
Так как OrderRepository по необходимости зависит от конкретного Linq to Sql DataContext, передача параметров DataContext нельзя сказать, чтобы сделать код повторно используемым или уменьшить зависимости любым значимым способом.
Это также делает код более трудным для чтения, поскольку для создания экземпляра репозитория мне теперь нужно написать
new OrdersRepository(new MyLinqDataContext())
что дополнительно противоречит основной цели репозитория, а именно абстрагировать/скрывать существование DataContext от потребления кода.
В общем, я думаю, что это будет довольно ужасный дизайн, но это даст возможность облегчить модульное тестирование. Достаточно ли этого оправдания? Или есть третий способ? Мне было бы очень интересно услышать мнения.