Add docs and example

This commit is contained in:
Roman Mogylatov 2021-02-05 18:13:05 -05:00
parent d48e2ea972
commit ef91b6fe2d
3 changed files with 43 additions and 4 deletions

View File

@ -54,6 +54,14 @@ provider.
Resetting of the memorized object clears the reference to it. Further object's lifecycle is Resetting of the memorized object clears the reference to it. Further object's lifecycle is
managed by the garbage collector. managed by the garbage collector.
Method ``.reset()`` resets only current provider. To reset all dependent singleton providers
call ``.full_reset()`` method.
.. literalinclude:: ../../examples/providers/singleton_full_resetting.py
:language: python
:lines: 3-
:emphasize-lines: 25
Using singleton with multiple threads Using singleton with multiple threads
------------------------------------- -------------------------------------

View File

@ -0,0 +1,31 @@
"""`Singleton` provider full resetting example."""
from dependency_injector import containers, providers
class Database:
...
class UserService:
def __init__(self, db: Database):
self.db = db
class Container(containers.DeclarativeContainer):
database = providers.Singleton(Database)
user_service = providers.Singleton(UserService, db=database)
if __name__ == '__main__':
container = Container()
user_service1 = container.user_service()
container.user_service.full_reset()
user_service2 = container.user_service()
assert user_service2 is not user_service1
assert user_service2.db is not user_service1.db

View File

@ -9,15 +9,15 @@ class UserService:
class Container(containers.DeclarativeContainer): class Container(containers.DeclarativeContainer):
user_service_provider = providers.Singleton(UserService) user_service = providers.Singleton(UserService)
if __name__ == '__main__': if __name__ == '__main__':
container = Container() container = Container()
user_service1 = container.user_service_provider() user_service1 = container.user_service()
container.user_service_provider.reset() container.user_service.reset()
user_service2 = container.user_service_provider() user_service2 = container.user_service()
assert user_service2 is not user_service1 assert user_service2 is not user_service1