python-dependency-injector/docs/providers/overriding.rst
Roman Mogylatov 6eff213a68
Migrate to alabaster (#264)
* Add bootstrap and remove created at from ghnav-flask app

* Update readme

* Add logo to the docs

* Update key features description

* Update README

* Change headers of API docs

* Add alabaster theme config

* Update docs index

* Add tutorials section

* Update what is DI page

* Update DI in Python page

* Update tutorials index page

* Update provider docs

* Update container docs

* Update examples docs
2020-07-18 00:40:14 -04:00

48 lines
1.5 KiB
ReStructuredText

Overriding of providers
-----------------------
.. currentmodule:: dependency_injector.providers
Every provider could be overridden by another provider.
This gives opportunity to make system behaviour more flexible at some point.
The main feature is that while your code is using providers, it depends on
providers, but not on the objects that providers provide. As a result of this,
you can change providing by provider object to a different one, but still
compatible one, without changing your previously written code.
Provider overriding functionality has such interface:
.. image:: /images/providers/provider_override.png
:width: 55%
:align: center
+ :py:meth:`Provider.override()` - takes another provider that will be used
instead of current provider. This method could be called several times.
In such case, last passed provider would be used as overriding one.
+ :py:meth:`Provider.reset_override()` - resets all overriding providers.
Provider starts to behave itself like usual.
+ :py:meth:`Provider.reset_last_overriding()` - remove last overriding
provider from stack of overriding providers.
Example:
.. image:: /images/providers/overriding_simple.png
:width: 80%
:align: center
.. literalinclude:: ../../examples/providers/overriding_simple.py
:language: python
Example:
.. image:: /images/providers/overriding_users_model.png
:width: 100%
:align: center
.. literalinclude:: ../../examples/providers/overriding_users_model.py
:language: python
.. disqus::