Add example and docs

This commit is contained in:
Roman Mogylatov 2020-10-22 13:41:55 -04:00
parent da70d7511f
commit 57b69ee196
3 changed files with 69 additions and 0 deletions

23
docs/providers/dict.rst Normal file
View File

@ -0,0 +1,23 @@
Dict provider
=============
.. meta::
:keywords: Python,DI,Dependency injection,IoC,Inversion of Control,Dict,Injection
:description: Dict provider helps to inject a dictionary of the dependencies. This page demonstrates
how to use Dict provider.
.. currentmodule:: dependency_injector.providers
:py:class:`Dict` provider provides a dictionary of values.
.. literalinclude:: ../../examples/providers/dict.py
:language: python
:lines: 3-
:emphasize-lines: 21-24
``Dict`` provider handles keyword arguments the same way as a :ref:`factory-provider`.
.. note::
Positional argument are not supported.
.. disqus::

View File

@ -43,6 +43,7 @@ Providers module API docs - :py:mod:`dependency_injector.providers`
coroutine
object
list
dict
configuration
selector
dependency

View File

@ -0,0 +1,45 @@
"""`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'),
# },
# )