Container
A Container groups related dependencies together, defining the
configuration for an entire project. Containers allow for structured dependency management and
automatic resolution.
class MainContainer(di.Container):
database = di.Singleton[Database](
uri=os.getenv("DATABASE_URI")
)
service = di.Transient[Service](
db=database
)
assert isinstance(MainContainer.database, SingletonProvider)
assert isinstance(MainContainer.service, TransientProvider)
However, mypy still assumes that MainContainer.database is a Database instance and
MainContainer.service is a Service instance. The same applies to the created container.
Traversing Providers
To traverse defined providers in a container:
for name, provider in SomeContainer.traverse():
pass
To reference a provider object instead of its instance:
di.Provide[SomeContainer.some_class].provider
Start
To start application and prepare Singleton provider:
SomeContainer.start()
Shutdown
To shurdown application and clear providers state:
SomeContainer.shutdown()