Dependency Injector
? Dependency Injector
— это платформа внедрения зависимостей для Python.
Это помогает реализовать принцип внедрения зависимостей.
Ключевые особенности Dependency Injector
:
Factory
, Singleton
, Callable
, Coroutine
, Object
, List
, Dict
, Configuration
, Resource
, Dependency
и Selector
, которые помогают собирать ваши объекты. См. Поставщики.yaml
, ini
и json
, настроек pydantic
, переменных среды и словарей. См. Поставщик конфигурации.mypy
. См. Ввод текста и mypy.Cython
. from dependency_injector import containers , providers
from dependency_injector . wiring import Provide , inject
class Container ( containers . DeclarativeContainer ):
config = providers . Configuration ()
api_client = providers . Singleton (
ApiClient ,
api_key = config . api_key ,
timeout = config . timeout ,
)
service = providers . Factory (
Service ,
api_client = api_client ,
)
@ inject
def main ( service : Service = Provide [ Container . service ]) -> None :
...
if __name__ == "__main__" :
container = Container ()
container . config . api_key . from_env ( "API_KEY" , required = True )
container . config . timeout . from_env ( "TIMEOUT" , as_ = int , default = 5 )
container . wire ( modules = [ __name__ ])
main () # <-- dependency is injected automatically
with container . api_client . override ( mock . Mock ()):
main () # <-- overridden dependency is injected automatically
Когда вы вызываете функцию main()
, зависимость Service
собирается и внедряется автоматически.
Когда вы проводите тестирование, вы вызываете container.api_client.override()
чтобы заменить реальный API-клиент макетом. Когда вы вызываете main()
, вводится макет.
Вы можете заменить любого провайдера другим провайдером.
Это также поможет вам при перенастройке проекта для различных сред: замените клиент API заглушкой на стадии разработки или на стадии разработки.
С помощью Dependency Injector
сборка объектов объединяется в контейнер. Внедрение зависимостей определяется явно. Это облегчает понимание и изменение работы приложения.
Посетите документацию, чтобы узнать больше о внедрении зависимостей и инверсии управления в Python.
Пакет доступен на PyPi:
pip install инжектор зависимостей
Документация доступна здесь.
Выберите один из следующих вариантов:
Выберите один из следующих вариантов:
Фреймворк основан на принципе PEP20 (Дзен Python):
Explicit is better than implicit
Вам необходимо явно указать, как собирать и куда вводить зависимости.
Сила фреймворка в его простоте. Dependency Injector
— это простой инструмент для реализации мощной концепции.
Dependency Injector
на GithubDependency Injector
Dependency Injector
develop
.