2020-08-14 23:27:17 +03:00
|
|
|
"""Declarative container injections example."""
|
2016-05-29 22:06:02 +03:00
|
|
|
|
|
|
|
import sqlite3
|
|
|
|
|
2020-08-14 23:27:17 +03:00
|
|
|
from dependency_injector import containers, providers
|
2016-05-29 22:06:02 +03:00
|
|
|
|
|
|
|
|
2020-08-14 23:27:17 +03:00
|
|
|
class UserService:
|
|
|
|
def __init__(self, db: sqlite3.Connection):
|
|
|
|
self.db = db
|
2016-05-29 22:06:02 +03:00
|
|
|
|
|
|
|
|
2020-08-14 23:27:17 +03:00
|
|
|
class AuthService:
|
|
|
|
def __init__(self, db: sqlite3.Connection, user_service: UserService):
|
|
|
|
self.db = db
|
|
|
|
self.user_service = user_service
|
|
|
|
|
|
|
|
|
|
|
|
class Container(containers.DeclarativeContainer):
|
2016-05-29 22:06:02 +03:00
|
|
|
|
2021-09-30 22:16:17 +03:00
|
|
|
database = providers.Singleton(sqlite3.connect, ":memory:")
|
2016-05-29 22:06:02 +03:00
|
|
|
|
2020-08-14 23:27:17 +03:00
|
|
|
user_service = providers.Factory(
|
|
|
|
UserService,
|
|
|
|
db=database,
|
|
|
|
)
|
|
|
|
|
|
|
|
auth_service = providers.Factory(
|
|
|
|
AuthService,
|
|
|
|
db=database,
|
|
|
|
user_service=user_service,
|
|
|
|
)
|
2016-05-29 22:06:02 +03:00
|
|
|
|
|
|
|
|
2021-09-30 22:16:17 +03:00
|
|
|
if __name__ == "__main__":
|
2020-08-16 05:09:41 +03:00
|
|
|
container = Container()
|
2016-05-29 22:06:02 +03:00
|
|
|
|
2020-08-16 05:09:41 +03:00
|
|
|
user_service = container.user_service()
|
|
|
|
auth_service = container.auth_service()
|
2016-05-29 22:06:02 +03:00
|
|
|
|
2020-08-16 05:09:41 +03:00
|
|
|
assert user_service.db is auth_service.db is container.database()
|
|
|
|
assert isinstance(auth_service.user_service, UserService)
|