2017-12-25 17:47:58 +03:00
|
|
|
Bundles mini application example
|
|
|
|
--------------------------------
|
|
|
|
|
|
|
|
.. currentmodule:: dependency_injector.containers
|
|
|
|
|
2020-06-14 05:24:32 +03:00
|
|
|
"Bundles" is an example mini application that is intended to demonstrate the
|
2017-12-25 17:47:58 +03:00
|
|
|
power of dependency injection for creation of re-usable application components
|
|
|
|
("bundles") with 100% transparency of their dependencies.
|
|
|
|
|
|
|
|
Example application
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
"Bundles" mini application has next structure:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
bundles/
|
|
|
|
bundles/ <-- Bundles package
|
|
|
|
photos/ <-- Photos bundle
|
|
|
|
__init__.py <-- Photos bundle dependency injection container
|
|
|
|
entities.py
|
|
|
|
repositories.py
|
|
|
|
users/ <-- Users bundle
|
|
|
|
__init__.py <-- Users bundle dependency injection container
|
|
|
|
entities.py
|
|
|
|
repositories.py
|
|
|
|
run.py <-- Entrypoint
|
|
|
|
|
|
|
|
|
|
|
|
IoC containers
|
|
|
|
~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
Next two listings show :py:class:`DeclarativeContainer`'s for "users" and
|
|
|
|
"photos" bundles.
|
|
|
|
|
2020-06-14 05:24:32 +03:00
|
|
|
Listing of ``bundles/users/__init__.py``:
|
2017-12-25 17:47:58 +03:00
|
|
|
|
|
|
|
.. literalinclude:: ../../examples/miniapps/bundles/bundles/users/__init__.py
|
|
|
|
:language: python
|
|
|
|
:linenos:
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
- ``Users`` container has dependency on database.
|
|
|
|
|
2020-06-14 05:24:32 +03:00
|
|
|
Listing of ``bundles/photos/__init__.py``:
|
2017-12-25 17:47:58 +03:00
|
|
|
|
|
|
|
.. literalinclude:: ../../examples/miniapps/bundles/bundles/photos/__init__.py
|
|
|
|
:language: python
|
|
|
|
:linenos:
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
- ``Photos`` container has dependencies on database and file storage.
|
|
|
|
|
|
|
|
Run application
|
|
|
|
~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
Finally, both "bundles" are initialized by providing needed dependencies.
|
|
|
|
Initialization of dependencies happens right in the runtime, not earlier.
|
|
|
|
Generally, it means, that any part of any bundle could be overridden on the
|
|
|
|
fly.
|
|
|
|
|
|
|
|
Listing of ``run.py``:
|
|
|
|
|
|
|
|
.. literalinclude:: ../../examples/miniapps/bundles/run.py
|
|
|
|
:language: python
|
|
|
|
:linenos:
|
|
|
|
|
|
|
|
Links
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
+ `Dependency Injector <https://github.com/ets-labs/python-dependency-injector/>`_
|
|
|
|
+ `Full example sources <https://github.com/ets-labs/python-dependency-injector/tree/master/examples/miniapps/bundles>`_
|
|
|
|
|
|
|
|
|
|
|
|
.. disqus::
|