mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-30 05:23:59 +03:00
53 lines
1.8 KiB
ReStructuredText
53 lines
1.8 KiB
ReStructuredText
Overriding of catalogs
|
|
----------------------
|
|
|
|
.. currentmodule:: dependency_injector.catalogs
|
|
|
|
Catalogs can be overridden by other catalogs. This, actually, means that
|
|
all of the providers from overriding catalog will override providers with the
|
|
same names in overridden catalog.
|
|
|
|
There are two ways to override :py:class:`DeclarativeCatalog` with another
|
|
catalog:
|
|
|
|
- Use :py:meth:`DeclarativeCatalog.override` method.
|
|
- Use :py:func:`override` class decorator.
|
|
|
|
Example of overriding catalog using :py:meth:`DeclarativeCatalog.override`
|
|
method:
|
|
|
|
.. literalinclude:: ../../examples/catalogs/override_declarative.py
|
|
:language: python
|
|
:linenos:
|
|
|
|
Example of overriding catalog using :py:func:`override` decorator:
|
|
|
|
.. literalinclude:: ../../examples/catalogs/override_declarative_decorator.py
|
|
:language: python
|
|
:linenos:
|
|
|
|
Also there are several useful :py:class:`DeclarativeCatalog` methods and
|
|
properties that help to work with catalog overridings:
|
|
|
|
- :py:attr:`DeclarativeCatalog.is_overridden` - read-only property that is set
|
|
to ``True`` if catalog is overridden.
|
|
- :py:attr:`DeclarativeCatalog.last_overriding` - read-only reference to
|
|
the last overriding catalog, if any.
|
|
- :py:attr:`DeclarativeCatalog.overridden_by` - tuple of all overriding
|
|
catalogs.
|
|
- :py:meth:`DeclarativeCatalog.reset_last_overriding()` - reset last
|
|
overriding catalog.
|
|
- :py:meth:`DeclarativeCatalog.reset_override()` - reset all overridings for
|
|
all catalog providers.
|
|
|
|
:py:class:`DynamicCatalog` has exactly the same functionality, except of
|
|
:py:func:`override` decorator. Also :py:class:`DynamicCatalog` can override
|
|
:py:class:`DeclarativeCatalog` and vise versa.
|
|
|
|
Example of overriding :py:class:`DeclarativeCatalog` by
|
|
:py:class:`DynamicCatalog`:
|
|
|
|
.. literalinclude:: ../../examples/catalogs/override_declarative_by_dynamic.py
|
|
:language: python
|
|
:linenos:
|