From 57b69ee19603914ba1cd91baed0f258e047e6b7d Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Thu, 22 Oct 2020 13:41:55 -0400 Subject: [PATCH] Add example and docs --- docs/providers/dict.rst | 23 +++++++++++++++++++ docs/providers/index.rst | 1 + examples/providers/dict.py | 45 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 docs/providers/dict.rst create mode 100644 examples/providers/dict.py diff --git a/docs/providers/dict.rst b/docs/providers/dict.rst new file mode 100644 index 00000000..45e07de3 --- /dev/null +++ b/docs/providers/dict.rst @@ -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:: diff --git a/docs/providers/index.rst b/docs/providers/index.rst index 8d14c670..ca36a11e 100644 --- a/docs/providers/index.rst +++ b/docs/providers/index.rst @@ -43,6 +43,7 @@ Providers module API docs - :py:mod:`dependency_injector.providers` coroutine object list + dict configuration selector dependency diff --git a/examples/providers/dict.py b/examples/providers/dict.py new file mode 100644 index 00000000..75f1a51e --- /dev/null +++ b/examples/providers/dict.py @@ -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'), + # }, + # )