Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'release/4.38.0' into master
- Loading branch information
Showing
40 changed files
with
18,105 additions
and
14,970 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
.. _aggregate-provider: | ||
|
||
Aggregate provider | ||
================== | ||
|
||
.. meta:: | ||
:keywords: Python,DI,Dependency injection,IoC,Inversion of Control,Configuration,Injection, | ||
Aggregate,Polymorphism,Environment Variable,Flexibility | ||
:description: Aggregate provider aggregates other providers. | ||
This page demonstrates how to implement the polymorphism and increase the | ||
flexibility of your application using the Aggregate provider. | ||
|
||
:py:class:`Aggregate` provider aggregates a group of other providers. | ||
|
||
.. currentmodule:: dependency_injector.providers | ||
|
||
.. literalinclude:: ../../examples/providers/aggregate.py | ||
:language: python | ||
:lines: 3- | ||
:emphasize-lines: 24-27 | ||
|
||
Each provider in the ``Aggregate`` is associated with a key. You can call aggregated providers by providing | ||
their key as a first argument. All positional and keyword arguments following the key will be forwarded to | ||
the called provider: | ||
|
||
.. code-block:: python | ||
yaml_reader = container.config_readers("yaml", "./config.yml", foo=...) | ||
You can also retrieve an aggregated provider by providing its key as an attribute name: | ||
|
||
.. code-block:: python | ||
yaml_reader = container.config_readers.yaml("./config.yml", foo=...) | ||
To retrieve a dictionary of aggregated providers, use ``.providers`` attribute: | ||
|
||
.. code-block:: python | ||
container.config_readers.providers == { | ||
"yaml": <YAML provider>, | ||
"json": <JSON provider>, | ||
} | ||
.. note:: | ||
You can not override the ``Aggregate`` provider. | ||
|
||
.. note:: | ||
When you inject the ``Aggregate`` provider, it is passed "as is". | ||
|
||
To use non-string keys or string keys with ``.`` and ``-``, provide a dictionary as a positional argument: | ||
|
||
.. code-block:: python | ||
aggregate = providers.Aggregate({ | ||
SomeClass: providers.Factory(...), | ||
"key.with.periods": providers.Factory(...), | ||
"key-with-dashes": providers.Factory(...), | ||
}) | ||
.. seealso:: | ||
:ref:`selector-provider` to make injections based on a configuration value, environment variable, or a result of a callable. | ||
|
||
``Aggregate`` provider is different from the :ref:`selector-provider`. ``Aggregate`` provider doesn't select which provider | ||
to inject and doesn't have a selector. It is a group of providers and is always injected "as is". The rest of the interface | ||
of both providers is similar. | ||
|
||
.. note:: | ||
``Aggregate`` provider is a successor of :ref:`factory-aggregate-provider` provider. ``Aggregate`` provider doesn't have | ||
a restriction on the provider type, while ``FactoryAggregate`` aggregates only ``Factory`` providers. | ||
|
||
.. disqus:: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.