Если что-то вначале делается в корне не верно, то потом его нужно будет переписть почти целиком. Я думаю, это не самый лучший подход. Но если есть желание потратить время на то, что потом будет выброшено - то ок, делай, я абсолютно не против :)
Еще один баг есть, кстати, в текущей имплементации контейнера. DeferredServiceProvider не переопределяет defenitions в отличие от обычного. Только не говорить, что так было задумано😏 Локально я уже исправил этот баг.
Кстати, мы не собираемся делать гибридный провайдер из DeferredServiceProvider? Если нет, то можно сделать метод provides() статическим, дабы не создавать объекты пока они не нужны.