mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-22 09:36:48 +03:00
46 lines
1.0 KiB
Python
46 lines
1.0 KiB
Python
"""`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:
|
|
# <object ...> is not an instance of DbAdapter
|