Permalink
Fetching contributors…
Cannot retrieve contributors at this time
78 lines (52 sloc) 2.09 KB

Bundles mini application example

.. currentmodule:: dependency_injector.containers

"Bundles" is an example mini application that is intented to demonstrate the 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:

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.

Listing of bundeles/users/__init__.py:

.. literalinclude:: ../../examples/miniapps/bundles/bundles/users/__init__.py
   :language: python
   :linenos:

Note

  • Users container has dependency on database.

Listing of bundeles/photos/__init__.py:

.. 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

.. disqus::