From b8a30601df14a78afc1faad7bffd7cb5db377b65 Mon Sep 17 00:00:00 2001 From: Roman Mogilatov Date: Wed, 2 Sep 2015 22:53:39 +0300 Subject: [PATCH] Update Factory providers delegation docs --- docs/images/providers/factory_delegation.png | Bin 21495 -> 20213 bytes docs/providers/factory.rst | 20 +++++++++---------- examples/providers/factory_delegation.py | 13 ++++++------ 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/docs/images/providers/factory_delegation.png b/docs/images/providers/factory_delegation.png index 3aa652793e09235f6ffd0e86e88b8b46ee1acd6e..28703c767c2ec548ba59eff85c6b2cb665c5fa37 100644 GIT binary patch literal 20213 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 G=Dz@0YwEfH diff --git a/docs/providers/factory.rst b/docs/providers/factory.rst index 8d39728c..3a42d780 100644 --- a/docs/providers/factory.rst +++ b/docs/providers/factory.rst @@ -105,20 +105,20 @@ Example: Factory providers delegation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``Factory`` provider could be delegated to any other provider via any kind of -injection. Saying in other words, delegation of factories - is a way to inject -factories themselves, instead of results of their calls. +``di.Factory`` provider could be delegated to any other provider via any kind +of injection. As it was mentioned earlier, if ``di.Factory`` is injectable +value, it will be called every time when injection is done. ``di.Factory`` +delegation is performed by wrapping delegated ``di.Factory`` into special +provider type - ``di.Delegate``, that just returns wrapped ``di.Factory``. +Saying in other words, delegation of factories - is a way to inject factories +themselves, instead of results of their calls. -As it was mentioned earlier, ``Injection`` calls ``Factory`` if ``Factory`` is -injectable value. ``Factory`` delegation is performed by wrapping delegated -``Factory`` into special provider type - ``Delegate``, that just returns -``Factory`` itself. Actually, there are two ways of creating factory delegates: -+ ``Delegate(Factory(...))`` - obviously wrapping factory into ``Delegate`` - provider. -+ ``Factory(...).delegate()`` - calling factory ``delegate()`` method, that ++ ``di.Delegate(di.Factory(...))`` - obviously wrapping factory into + ``di.Delegate`` provider. ++ ``di.Factory(...).delegate()`` - calling factory ``delegate()`` method, that returns delegate wrapper for current factory. Example: diff --git a/examples/providers/factory_delegation.py b/examples/providers/factory_delegation.py index 4715077f..f878f6f0 100644 --- a/examples/providers/factory_delegation.py +++ b/examples/providers/factory_delegation.py @@ -1,7 +1,6 @@ -"""`Factory` providers delegation example.""" +"""`di.Factory` providers delegation example.""" -from dependency_injector.providers import Factory -from dependency_injector.injections import KwArg +import dependency_injector as di class User(object): @@ -11,7 +10,7 @@ class User(object): def __init__(self, photos_factory): """Initializer. - :param photos_factory: (dependency_injector.providers.Factory) -> Photo + :param photos_factory: (di.Factory) -> Photo """ self.photos_factory = photos_factory self._main_photo = None @@ -30,9 +29,9 @@ class Photo(object): """Example class Photo.""" # User and Photo factories: -photos_factory = Factory(Photo) -users_factory = Factory(User, - KwArg('photos_factory', photos_factory.delegate())) +photos_factory = di.Factory(Photo) +users_factory = di.Factory(User, + photos_factory=di.Delegate(photos_factory)) # Creating several User objects: user1 = users_factory()