Комментарии 11
Какой-то плохой DI получился. На глобальных переменных. В итоге в сам работщий эземпляр вьюхи мы ничего и не инжектируем. Не понимаю, чем вам не угодили обычные class-based views с пробросом зависимости через __init__
.
Я не использовал никогда эту библиотеку и не знаю её возможностей, сужу по примеру. Я всегда считал, что DI — это когда зависимость передается в конкретный экземпляр объекта. Классически это делается через поля или параметры инита. В вашем случае зависмостью вьюхи является глобальная переменная DIServices определенная на уровне модуля. То, что она заполняется данным отложенно и из другого модуля, не делает её менее глобальной.
Фактически в случае нормального DI предполагается, что можно сделать несколько экземпляров вьюхи и передать туда разные зависимости, не меняя её кода. В вашем примере это невозможно. Более того, я не понимаю, зачем для такого примера тащить целую библиотеку, а не просто сделать класс такого вида:
class DIServices(di_cnt.DeclarativeContainer):
mail: Optional[Email] = None
Прошу прощения, поторопился с кодом. Я имел ввиду вот такой тривиальный
class DIServices:
mail: Optional[Mail] = None
Web-приложения на Flask: как бороться с циклическими импортами