Di Containers¶
-
Back to Bootstrap Overview
Return to the Bootstrap overview page with all configuration options.
Overview¶
The bootstrap functions support multiple DI container implementations.
| Container | Library | Default | Best For |
|---|---|---|---|
| di.Container | di |
✅ Yes | Most applications |
| CQRSContainer | dependency-injector |
❌ No | Large, complex applications |
Container Choice
Use di.Container for most applications. Use dependency-injector only if you need advanced features like configuration management or nested containers.
di.Container¶
The di library is the default and recommended DI container:
import abc
import di
from di import dependent
class ServiceProtocol(abc.ABC):
@abc.abstractmethod
async def do_work(self) -> None:
pass
class ServiceImpl(ServiceProtocol):
async def do_work(self) -> None:
print("Working...")
# Setup DI container
container = di.Container()
container.bind(
di.bind_by_type(
dependent.Dependent(ServiceImpl, scope="request"),
ServiceProtocol,
)
)
mediator = bootstrap.bootstrap(
di_container=container,
commands_mapper=commands_mapper,
)
CQRSContainer (dependency-injector)¶
The CQRSContainer adapter allows using dependency-injector library:
from dependency_injector import containers, providers
from cqrs.container import DependencyInjectorCQRSContainer
class ApplicationContainer(containers.DeclarativeContainer):
# Define your services
service = providers.Factory(ServiceImpl)
# Create CQRS container adapter
cqrs_container = DependencyInjectorCQRSContainer(ApplicationContainer())
mediator = bootstrap.bootstrap(
di_container=cqrs_container,
commands_mapper=commands_mapper,
)