"""`Dependency` provider example.""" import abc import dataclasses from dependency_injector import containers, providers class DbAdapter(metaclass=abc.ABCMeta): ... class SqliteDbAdapter(DbAdapter): ... class PostgresDbAdapter(DbAdapter): ... @dataclasses.dataclass class UserService: database: DbAdapter class Container(containers.DeclarativeContainer): database = providers.Dependency(instance_of=DbAdapter) user_service = providers.Factory( UserService, database=database, ) if __name__ == "__main__": container1 = Container(database=providers.Singleton(SqliteDbAdapter)) container2 = Container(database=providers.Singleton(PostgresDbAdapter)) assert isinstance(container1.user_service().database, SqliteDbAdapter) assert isinstance(container2.user_service().database, PostgresDbAdapter) container3 = Container(database=providers.Singleton(object)) container3.user_service() # <-- raises error: # is not an instance of DbAdapter