Release 1.16.7

This commit is contained in:
Roman Mogilatov 2016-04-26 13:14:39 +03:00
parent 4e70d138fe
commit cbc8d70151
9 changed files with 54 additions and 46 deletions

View File

@ -61,7 +61,7 @@ from dependency_injector.errors import (
from dependency_injector import catalogs from dependency_injector import catalogs
catalog = catalogs catalog = catalogs
VERSION = '1.16.5' VERSION = '1.16.7'
"""Version number that follows semantic versioning. """Version number that follows semantic versioning.
:type: str :type: str

View File

@ -93,7 +93,7 @@ Example
Let's go through next example: Let's go through next example:
.. literalinclude:: ../../examples/ioc_di_demos/car_engine_1.py .. literalinclude:: ../../examples/ioc_di_demos/car_engine.py
:language: python :language: python
:linenos: :linenos:
@ -101,6 +101,27 @@ Let's go through next example:
more sense then creating an ``Engine`` separatelly and then more sense then creating an ``Engine`` separatelly and then
**put (inject) it into** ``Car`` when ``Car`` is being created? **put (inject) it into** ``Car`` when ``Car`` is being created?
.. literalinclude:: ../../examples/ioc_di_demos/car_engine_2.py .. literalinclude:: ../../examples/ioc_di_demos/car_engine_ioc.py
:language: python :language: python
:linenos: :linenos:
Previous example may look more obvious and gives a chance to start getting
other benefits of dependency injection and inversion of control, but creation
of ``Car`` instances became a bit harder cause now ``Engine`` injections
should be done manually every time when ``Car`` instances are being created.
Let's automate ``Engine`` into ``Car`` injections using *Dependency Injector*:
.. literalinclude:: ../../examples/ioc_di_demos/car_engine_ioc_container.py
:language: python
:linenos:
.. note::
``Components`` from previous example is an inversion of control container.
It contains a collection of component providers that could be injected
into each other.
Assuming this, ``Components`` could be one and the only place, where
application's structure is being managed on the high level.

View File

@ -88,28 +88,12 @@ Let's go through the code of ``example.py``:
:linenos: :linenos:
At some point, things defined above mean, that the code from ``example.py``, At some point, things defined above mean, that the code from ``example.py``,
could look different, like in ``ioc_example.py``: could look different, like in ``example_ioc.py``:
.. literalinclude:: ../../examples/ioc_di_demos/ioc_example.py .. literalinclude:: ../../examples/ioc_di_demos/example_ioc.py
:language: python :language: python
:linenos: :linenos:
Also the code from ``ioc_example.py`` could be upgraded with inversion of
control container, like in ``ioc_container_example.py``:
.. literalinclude:: ../../examples/ioc_di_demos/ioc_container_example.py
:language: python
:linenos:
.. note::
``Components`` from ``ioc_container_example.py`` is an IoC container. It
contains a collection of component providers that could be injected into
each other.
Assuming this, ``Components`` could be one and the only place, where
application's structure is being managed on the high level.
Best explanation, ever Best explanation, ever
~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~

View File

@ -11,6 +11,10 @@ Development version
------------------- -------------------
- No features. - No features.
1.16.7
------
- Add some changes into introduction section of documentation.
1.16.5 1.16.5
------ ------
- Move project to ``https://github.com/ets-labs/python-dependency-injector``. - Move project to ``https://github.com/ets-labs/python-dependency-injector``.

View File

@ -1,4 +1,4 @@
"""Car & Engine example 1.""" """Car & Engine example."""
class Engine(object): class Engine(object):
@ -14,5 +14,4 @@ class Car(object):
if __name__ == '__main__': if __name__ == '__main__':
car = Car() car = Car() # Application creates Car's instance
assert car.engine is not None

View File

@ -1,4 +1,4 @@
"""Car & Engine example 2.""" """Refactored Car & Engine example that demostrates inversion of control."""
class Engine(object): class Engine(object):
@ -14,5 +14,5 @@ class Car(object):
if __name__ == '__main__': if __name__ == '__main__':
car = Car(Engine()) engine = Engine() # Application creates Engine's instance
assert car.engine is not None car = Car(engine) # and inject it into the Car's instance

View File

@ -0,0 +1,19 @@
"""Example of inversion of control container for Car & Engine example."""
from dependency_injector import catalogs
from dependency_injector import providers
from car_engine_ioc import Car
from car_engine_ioc import Engine
class Components(catalogs.DeclarativeCatalog):
"""Catalog of component providers."""
engine = providers.Factory(Engine)
car = providers.Factory(Car, engine=engine)
if __name__ == '__main__':
car = Components.car() # Application creates Car's instance

View File

@ -1,19 +0,0 @@
"""The Code, that uses IoC container."""
from dependency_injector import catalogs
from dependency_injector import providers
from ioc_example import Service
from ioc_example import Client
class Components(catalogs.DeclarativeCatalog):
"""Catalog of component providers."""
service = providers.Factory(Service)
client = providers.Factory(Client, service=service)
if __name__ == '__main__':
client = Components.client() # Application creates Client's instance