From 98c4ec71c10de7e394be7fb3df300f87b59a1d2f Mon Sep 17 00:00:00 2001 From: Roman Mogilatov Date: Wed, 2 Sep 2015 19:06:09 +0300 Subject: [PATCH] Update Singleton provider docs --- docs/images/providers/singleton.png | Bin 9642 -> 10265 bytes docs/images/providers/singleton_internals.png | Bin 11572 -> 10589 bytes docs/providers/singleton.rst | 41 ++++++++++-------- examples/providers/singleton.py | 6 +-- examples/providers/singleton_delegation.py | 9 ++-- examples/providers/singleton_reseting.py | 6 +-- 6 files changed, 32 insertions(+), 30 deletions(-) diff --git a/docs/images/providers/singleton.png b/docs/images/providers/singleton.png index 605b8b19127ee3d0f9583680b909b83ff8c68df8..595d359f4141b47a939dad4e43e4ff7ca458974e 100644 GIT binary patch literal 10265 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 literal 9642 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 diff --git a/docs/images/providers/singleton_internals.png b/docs/images/providers/singleton_internals.png index 3bb058282036e268ed770502f0d487525c181f3c..f05fb9022086b37d88b181c952bb0b6c5405c037 100644 GIT binary patch literal 10589 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 literal 11572 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 LDpKVVppgFo`2!qx diff --git a/docs/providers/singleton.rst b/docs/providers/singleton.rst index ba0bee96..c372e50d 100644 --- a/docs/providers/singleton.rst +++ b/docs/providers/singleton.rst @@ -1,7 +1,7 @@ Singleton providers ------------------- -``Singleton`` provider creates new instance of specified class on first call +``di.Singleton`` provider creates new instance of specified class on first call and returns same instance on every next call. Example: @@ -16,9 +16,9 @@ Example: Singleton providers and injections ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``Singleton`` providers use ``Factory`` providers for first creation of +``di.Singleton`` providers use ``di.Factory`` providers for first creation of specified class instance, so, all of the rules about injections are the same, -as for ``Factory`` providers. +as for ``di.Factory`` providers. .. image:: /images/providers/singleton_internals.png :width: 80% @@ -26,27 +26,29 @@ as for ``Factory`` providers. .. note:: - Due that ``Singleton`` provider creates specified class instance only on + Due that ``di.Singleton`` provider creates specified class instance only on the first call, all injections are done once, during the first call, also. Every next call, while instance has been already created and memorized, no - injections are done, ``Singleton`` provider just returns memorized earlier - instance. + injections are done, ``di.Singleton`` provider just returns memorized + earlier instance. This may cause some problems, for example, in case of trying to bind - ``Factory`` provider with ``Singleton`` provider (provided by dependent - ``Factory`` instance will be injected only once, during the first call). - Be aware that such behaviour was made with opened eyes and is not a bug. + ``di.Factory`` provider with ``di.Singleton`` provider (provided by + dependent ``di.Factory`` instance will be injected only once, during the + first call). Be aware that such behaviour was made with opened eyes and is + not a bug. - By the way, in such case, ``Delegate`` provider can be useful. It makes + By the way, in such case, ``di.Delegate`` provider can be useful. It makes possible to inject providers *as is*. Please check out full example in *Providers delegation* section. Singleton providers resetting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Created and memorized by ``Singleton`` instance can be reset. Reset of -``Singleton``'s memorized instance is done by clearing reference to it. Further -lifecycle of memorized instance is out of ``Singleton`` provider's control. +Created and memorized by ``di.Singleton`` instance can be reset. Reset of +``di.Singleton``'s memorized instance is done by clearing reference to it. +Further lifecycle of memorized instance is out of ``di.Singleton`` provider's +control. Example: @@ -56,13 +58,14 @@ Example: Singleton providers delegation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -``Singleton`` provider could be delegated to any other provider via any kind of -injection. Delegation of ``Singleton`` providers is the same as ``Factory`` -providers delegation, please follow *Factory providers delegation* section for -example. +``di.Singleton`` provider could be delegated to any other provider via any +kind of injection. Delegation of ``di.Singleton`` providers is the same as +``di.Factory`` providers delegation, please follow +*Factory providers delegation* section for example. -``Singleton`` delegate could be created obviously using -``Delegate(Singleton())`` or by calling ``Singleton.delegate()`` method. +``di.Singleton`` delegate could be created obviously using +``di.Delegate(di.Singleton())`` or by calling ``di.Singleton.delegate()`` +method. Example: diff --git a/examples/providers/singleton.py b/examples/providers/singleton.py index 934437b7..0697e218 100644 --- a/examples/providers/singleton.py +++ b/examples/providers/singleton.py @@ -1,6 +1,6 @@ -"""`Singleton` providers example.""" +"""`di.Singleton` providers example.""" -from dependency_injector.providers import Singleton +import dependency_injector as di class UserService(object): @@ -9,7 +9,7 @@ class UserService(object): # Singleton provider creates new instance of specified class on first call and # returns same instance on every next call. -users_service_provider = Singleton(UserService) +users_service_provider = di.Singleton(UserService) # Retrieving several UserService objects: user_service1 = users_service_provider() diff --git a/examples/providers/singleton_delegation.py b/examples/providers/singleton_delegation.py index e15fe51f..ebc9aa2e 100644 --- a/examples/providers/singleton_delegation.py +++ b/examples/providers/singleton_delegation.py @@ -1,13 +1,12 @@ -"""`Singleton` providers delegation example.""" +"""`di.Singleton` providers delegation example.""" -from dependency_injector.providers import Singleton -from dependency_injector.providers import Delegate +import dependency_injector as di # Some singleton provider and few delegates of it: -singleton_provider = Singleton(object) +singleton_provider = di.Singleton(object) singleton_provider_delegate1 = singleton_provider.delegate() -singleton_provider_delegate2 = Delegate(singleton_provider) +singleton_provider_delegate2 = di.Delegate(singleton_provider) # Making some asserts: assert singleton_provider_delegate1() is singleton_provider diff --git a/examples/providers/singleton_reseting.py b/examples/providers/singleton_reseting.py index a6dc2012..8495dd6c 100644 --- a/examples/providers/singleton_reseting.py +++ b/examples/providers/singleton_reseting.py @@ -1,6 +1,6 @@ -"""`Singleton` providers resetting example.""" +"""`di.Singleton` providers resetting example.""" -from dependency_injector.providers import Singleton +import dependency_injector as di class UserService(object): @@ -8,7 +8,7 @@ class UserService(object): """Example class UserService.""" # Users service singleton provider: -users_service_provider = Singleton(UserService) +users_service_provider = di.Singleton(UserService) # Retrieving several UserService objects: user_service1 = users_service_provider()