У мене є велика база коду з великою кількістю "антидіапазонних" синглтонів, утилітні класи зі статичними методами та класи, що створюють власні залежності за допомогою new
ключового слова. Це робить код дуже важким для перевірки.
Я хочу поступово перенести код на контейнер для ін'єкцій залежності (в моєму випадку це Guice
, тому що це GWT
проект). З мого розуміння введення залежності, це все або нічого. Або всіма класами керує Spring / Guice, або жоден. Оскільки база коду велика, я не можу перетворити код протягом ночі. Тому мені потрібен спосіб зробити це поступово.
Проблема полягає в тому, що коли я починаю з класу, який потрібно вводити в інші класи, я не можу використовувати простий @Inject
у цих класах, оскільки цими класами ще не керує контейнер. Таким чином, це створює довгий ланцюг аж до "верхніх" класів, які ніде не вводяться.
Єдиний спосіб, який я бачу, - це зробити Injector
контекст / додаток глобально доступним на даний момент через сингл, щоб інші класи могли отримати керовані боби з нього. Але це суперечить важливій ідеї не розкривати composition root
додаток.
Іншим підходом буде «знизу вгору»: почати з класів «високого рівня», включити їх у контейнер для ін'єкцій залежності та повільно перейти до «менших» класів. Але тоді мені доведеться довго чекати, оскільки я можу перевірити ті менші класи, які все ще залежать від глобальної / статичної.
Яким був би спосіб досягти такої поступової міграції?
PS Питання Поступові підходи до введення залежності залежать від назви, але це не відповідає на моє запитання.