2015-11-13 19:58:29 +03:00
|
|
|
Declarative catalogs
|
|
|
|
--------------------
|
|
|
|
|
2015-11-14 23:47:33 +03:00
|
|
|
:py:class:`dependency_injector.catalogs.DeclarativeCatalog` is a catalog of
|
|
|
|
providers that could be defined in declarative manner. It should cover most
|
|
|
|
of the cases when list of providers that would be included in catalog is
|
|
|
|
deterministic (catalog will not change its structure in runtime).
|
2015-11-13 19:58:29 +03:00
|
|
|
|
|
|
|
Declarative catalogs have to extend base declarative catalog class -
|
2015-11-14 23:47:33 +03:00
|
|
|
:py:class:`dependency_injector.catalogs.DeclarativeCatalog`.
|
2015-11-13 19:58:29 +03:00
|
|
|
|
|
|
|
Providers have to be defined like catalog's class attributes. Every provider in
|
|
|
|
catalog has name. This name should follow ``some_provider`` convention,
|
|
|
|
that is standard naming convention for attribute names in Python.
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
2015-11-14 23:47:33 +03:00
|
|
|
It might be useful to add such
|
|
|
|
``""":type: dependency_injector.providers.Provider -> Object1"""``
|
2015-11-13 19:58:29 +03:00
|
|
|
docstrings just on the next line after provider's definition. It will
|
|
|
|
help code analyzing tools and IDE's to understand that variable above
|
|
|
|
contains some callable object, that returns particular instance as a
|
|
|
|
result of its call.
|
|
|
|
|
|
|
|
Here is an simple example of declarative catalog with several factories:
|
|
|
|
|
|
|
|
.. image:: /images/catalogs/declarative.png
|
|
|
|
:width: 85%
|
|
|
|
:align: center
|
|
|
|
|
|
|
|
.. literalinclude:: ../../examples/catalogs/declarative.py
|
|
|
|
:language: python
|
|
|
|
|
2015-11-14 23:47:33 +03:00
|
|
|
:py:class:`dependency_injector.catalogs.DeclarativeCatalog` has several
|
|
|
|
features that could be useful for some kind of operations on catalog's
|
|
|
|
providers (please visit API docs for getting full list of feautes -
|
2015-11-14 00:43:36 +03:00
|
|
|
:py:class:`dependency_injector.catalogs.DeclarativeCatalog`):
|
2015-11-13 19:58:29 +03:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
.. image:: /images/catalogs/declarative_api.png
|
|
|
|
:width: 100%
|
|
|
|
:align: center
|
|
|
|
|
|
|
|
.. literalinclude:: ../../examples/catalogs/declarative_api.py
|
|
|
|
:language: python
|