Add docs and the example

This commit is contained in:
Roman Mogylatov 2021-02-28 20:55:47 -05:00
parent 515dbd63cf
commit 850e1c7b36
2 changed files with 54 additions and 0 deletions

View File

@ -164,6 +164,29 @@ To inject a container use special identifier ``<container>``:
def foo(container: Container = Provide['<container>']) -> None:
...
Making injections into modules and class attributes
---------------------------------------------------
You can use wiring to make injections into modules and class attributes.
.. literalinclude:: ../examples/wiring/example_attribute.py
:language: python
:lines: 3-
:emphasize-lines: 16,21
You could also use string identifiers to avoid a dependency on a container:
.. code-block:: python
:emphasize-lines: 1,6
service: Service = Provide['service']
class Main:
service: Service = Provide['service']
Wiring with modules and packages
--------------------------------

View File

@ -0,0 +1,31 @@
"""Wiring attribute example."""
import sys
from dependency_injector import containers, providers
from dependency_injector.wiring import Provide
class Service:
...
class Container(containers.DeclarativeContainer):
service = providers.Factory(Service)
service: Service = Provide[Container.service]
class Main:
service: Service = Provide[Container.service]
if __name__ == '__main__':
container = Container()
container.wire(modules=[sys.modules[__name__]])
assert isinstance(service, Service)
assert isinstance(Main.service, Service)