mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-30 05:23:59 +03:00
46 lines
1.0 KiB
Python
46 lines
1.0 KiB
Python
|
"""`Dict` provider example."""
|
||
|
|
||
|
import dataclasses
|
||
|
from typing import Dict
|
||
|
|
||
|
from dependency_injector import containers, providers
|
||
|
|
||
|
|
||
|
@dataclasses.dataclass
|
||
|
class Module:
|
||
|
name: str
|
||
|
|
||
|
|
||
|
@dataclasses.dataclass
|
||
|
class Dispatcher:
|
||
|
modules: Dict[str, Module]
|
||
|
|
||
|
|
||
|
class Container(containers.DeclarativeContainer):
|
||
|
|
||
|
dispatcher_factory = providers.Factory(
|
||
|
Dispatcher,
|
||
|
modules=providers.Dict(
|
||
|
module1=providers.Factory(Module, name='m1'),
|
||
|
module2=providers.Factory(Module, name='m2'),
|
||
|
),
|
||
|
)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
container = Container()
|
||
|
|
||
|
dispatcher = container.dispatcher_factory()
|
||
|
|
||
|
assert isinstance(dispatcher.modules, dict)
|
||
|
assert dispatcher.modules['module1'].name == 'm1'
|
||
|
assert dispatcher.modules['module2'].name == 'm2'
|
||
|
|
||
|
# Call "dispatcher = container.dispatcher_factory()" is equivalent to:
|
||
|
# dispatcher = Dispatcher(
|
||
|
# modules={
|
||
|
# 'module1': Module(name='m1'),
|
||
|
# 'module2': Module(name='m2'),
|
||
|
# },
|
||
|
# )
|