может и не совсем зло, просто это два разных подхода, и когда смерживаются конфиги и провайдеры, то могут быть проблемы. Да и работают они немного по-разному, в провайдерах имеет приоритет провайдер самой вложенной зависимости.
Кстати вот и нет. Если в пакете в провайдере задаётся для интерфейса Х класс А, а в приложении в провайдере для того же интерфейса Х задаётся класс Б. То по итогу реализацией интерфейса Х будет класс А из пакета.