2015-07-21 06:57:13 +00:00
|
|
|
Overriding of providers
|
|
|
|
-----------------------
|
|
|
|
|
2015-11-29 21:30:48 +00:00
|
|
|
.. currentmodule:: dependency_injector.providers
|
2015-11-23 15:02:48 +00:00
|
|
|
|
2015-07-21 06:57:13 +00:00
|
|
|
Every provider could be overridden by another provider.
|
2015-07-25 01:57:20 +00:00
|
|
|
|
2016-06-09 16:40:22 +00:00
|
|
|
This gives opportunity to make system behaviour more flexible at some point.
|
2015-07-25 01:57:20 +00:00
|
|
|
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
|
2020-06-14 02:24:32 +00:00
|
|
|
compatible one, without changing your previously written code.
|
2015-07-25 01:57:20 +00:00
|
|
|
|
|
|
|
Provider overriding functionality has such interface:
|
|
|
|
|
2015-09-02 15:14:13 +00:00
|
|
|
.. image:: /images/providers/provider_override.png
|
2016-06-09 16:40:22 +00:00
|
|
|
:width: 55%
|
2015-07-25 01:57:20 +00:00
|
|
|
:align: center
|
|
|
|
|
2015-11-23 15:02:48 +00:00
|
|
|
+ :py:meth:`Provider.override()` - takes another provider that will be used
|
2015-09-02 15:14:13 +00:00
|
|
|
instead of current provider. This method could be called several times.
|
|
|
|
In such case, last passed provider would be used as overriding one.
|
2015-11-23 15:02:48 +00:00
|
|
|
+ :py:meth:`Provider.reset_override()` - resets all overriding providers.
|
|
|
|
Provider starts to behave itself like usual.
|
2016-06-09 16:40:22 +00:00
|
|
|
+ :py:meth:`Provider.reset_last_overriding()` - remove last overriding
|
|
|
|
provider from stack of overriding providers.
|
2015-07-25 01:57:20 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
.. image:: /images/providers/overriding_simple.png
|
|
|
|
:width: 80%
|
|
|
|
:align: center
|
|
|
|
|
2015-08-03 12:52:23 +00:00
|
|
|
.. literalinclude:: ../../examples/providers/overriding_simple.py
|
|
|
|
:language: python
|
2015-07-25 01:57:20 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
.. image:: /images/providers/overriding_users_model.png
|
|
|
|
:width: 100%
|
|
|
|
:align: center
|
|
|
|
|
2015-08-03 12:52:23 +00:00
|
|
|
.. literalinclude:: ../../examples/providers/overriding_users_model.py
|
|
|
|
:language: python
|
2017-02-28 20:07:12 +00:00
|
|
|
|
|
|
|
|
|
|
|
.. disqus::
|