"""Declarative IoC container's provider injections example.""" import sqlite3 import collections import dependency_injector.containers as containers import dependency_injector.providers as providers UsersService = collections.namedtuple('UsersService', ['db']) AuthService = collections.namedtuple('AuthService', ['db', 'users_service']) class Services(containers.DeclarativeContainer): """IoC container of service providers.""" database = providers.Singleton(sqlite3.connect, ':memory:') users = providers.Factory(UsersService, db=database) auth = providers.Factory(AuthService, db=database, users_service=users) # Retrieving service providers from container: users_service = Services.users() auth_service = Services.auth() # Making some asserts: assert users_service.db is auth_service.db is Services.database() assert isinstance(auth_service.users_service, UsersService) assert users_service is not Services.users() assert auth_service is not Services.auth()