mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-24 10:34:01 +03:00
75 lines
1.9 KiB
ReStructuredText
75 lines
1.9 KiB
ReStructuredText
Factory of Factories pattern
|
|
============================
|
|
|
|
This example demonstrates "Factory of Factories" pattern.
|
|
|
|
The idea of the pattern is in creating a ``Factory`` that creates another ``Factory`` and adds
|
|
additional arguments.
|
|
|
|
.. code-block:: python
|
|
|
|
base_factory = providers.Factory(
|
|
providers.Factory
|
|
SomeClass,
|
|
base_argument=1,
|
|
)
|
|
|
|
concrete_factory = providers.Factory(
|
|
OtherClass,
|
|
instance=base_factory(extra_argument=1),
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
instance = concrete_factory()
|
|
# Same as: # instance = SomeClass(base_argument=1, extra_argument=2)
|
|
|
|
Sample code
|
|
-----------
|
|
|
|
Listing of the pattern example:
|
|
|
|
.. literalinclude:: ../../examples/miniapps/factory-patterns/factory_of_factories.py
|
|
:language: python
|
|
|
|
Arguments priority
|
|
------------------
|
|
|
|
Passing of the arguments works the same way like for any other :ref:`factory-provider`.
|
|
|
|
.. code-block:: python
|
|
|
|
# 1. Keyword arguments of upper level factory are added to lower level factory
|
|
factory_of_dict_factories = providers.Factory(
|
|
providers.Factory,
|
|
dict,
|
|
arg1=1,
|
|
)
|
|
dict_factory = factory_of_dict_factories(arg2=2)
|
|
print(dict_factory()) # prints: {"arg1": 1, "arg2": 2}
|
|
|
|
# 2. Keyword arguments of upper level factory have priority
|
|
factory_of_dict_factories = providers.Factory(
|
|
providers.Factory,
|
|
dict,
|
|
arg1=1,
|
|
)
|
|
dict_factory = factory_of_dict_factories(arg1=2)
|
|
print(dict_factory()) # prints: {"arg1": 2}
|
|
|
|
# 3. Keyword arguments provided from context have the most priority
|
|
factory_of_dict_factories = providers.Factory(
|
|
providers.Factory,
|
|
dict,
|
|
arg1=1,
|
|
)
|
|
dict_factory = factory_of_dict_factories(arg1=2)
|
|
print(dict_factory(arg1=3)) # prints: {"arg1": 3}
|
|
|
|
Credits
|
|
-------
|
|
|
|
The "Factory of Factories" pattern was suggested by the ``Dependency Injector`` users.
|
|
|
|
.. disqus::
|