Я проводил рефакторинг существующей системы, чтобы использовать внедрение зависимостей, и эта работа шла гладко.
Через некоторое время я заметил, что большое количество внутренних библиотек стало зависимым от используемой мной структуры DI. В результате весь проект теперь зависит от этой сторонней структуры.
Я видел иронию в том, чтобы отделить все зависимости, сделав их зависимыми от общей библиотеки.
Моей первой реакцией было создание библиотеки-оболочки вокруг структуры зависимостей. Поэтому я мог бы заменить эту структуру при необходимости. После оценки проделанной работы я понял, что полученный API будет аналогичен существующему фреймворку и, следовательно, сделает его замену более сложной. Поэтому я отказался от идеи.
Меня беспокоит то, что используемая мной структура DI устарела или нуждается в замене.
Существует ли шаблон разработки при работе с DI, который уменьшает связь между проектом и структурой DI?
DIFramework.Get<IService>()
самом деле не является инъекцией зависимости; это связанный шаблон под названием Service Locator. Многим людям не нравится Service Locator, потому что он связывает вас с платформой и потому, что им слишком легко злоупотреблять (например, Singleton). У Мартина Фаулера есть потрясающая статья об этих шаблонах: martinfowler.com/articles/injection.html