Dishka - IoC-контейнер для Python



Когда мы следуем подходу Dependency Injection, а особенно - слоистой архитектуре, у нас образуется отдельная группа функций и классов, выполняющих только одну задачу - создание других объектов. Такой код лучше держать поближе к main, так как он связывает воедино разные части приложения и связан с конфигурацией запуска.



В сложном приложении такой компонент может содержать большое количество функций, контролировать как создание, так и корректную очистку объектов и, что самое главное, их взаимосвязь. Для упрощения работы с такими фабриками придумали отдельный тип библиотек - IoC-контейнеры (DI-фреймворки).



В Python меня долго не устраивали существующие контейнеры и я решил сделать свой:



Хочу представить вам Dishka 1.0



Цель этого проекта - предоставить простой и удобный IoC-контейнер, который сможет забрать всю работу с зависимостями. Мне кажется, на текущий момент это самый функциональный вариант контейнера, имеющий при этом самое простое API.



• Вы можете использовать его с любым фреймворком, но для некоторых мы уже подготовили хелперы

• Для создания зависимости можно указать отдельную функцию или использовать __init__ класса

• Зависимости имеют ограниченное время жизни (скоуп) и вы сами управляете им

• Зависимости кэшируются, поэтому один и тот же объект может быть переиспользован пока он жив. Так можно передать одно соединение с БД в несколько гейтвеев

• Фабрики зависимостей можно группировать в классы и компоненты, что позволяет делать контейнер модульным

• Можно декорировать объекты, использовать один объект для нескольких типов

• При старте проверяется корректность конфигурации контейнера, что позволяет исключить многие ошибки



Что значит версия 1.0?



У библиотеки было 9 промежуточных релизов, мы рады объявить, что закончена вся работа по стабилизации её интерфейса и исправлению ошибок. И у нас есть планы по развитию, уникальные фичи сами себя не напишут.



Будем рады новым пользователям, багрепортам, запросам фич и звездам на гитхабе.



Видео с Podlodka: http://www.youtube.com/watch?v=gWOBaZ3I4gc



Github

Pypi

Документация