Add docs about Factory and Singleton provides specialization

This commit is contained in:
Roman Mogilatov 2015-12-13 14:22:59 +02:00
parent f3668ed815
commit 80a329d480
6 changed files with 97 additions and 11 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@ -9,10 +9,8 @@ follows `Semantic versioning`_
Development version Development version
------------------- -------------------
- Add possibility to validate ``Factory`` provided type on ``Factory`` - Add possibility to specialize ``Factory`` provided type.
initialization. - Add possibility to specialize ``Singleton`` provided type.
- Add possibility to validate ``Singleton`` provided type on ``Singleton``
initialization.
- Make some refactorings for providers. - Make some refactorings for providers.
1.11.2 1.11.2

View File

@ -174,3 +174,14 @@ Example:
.. literalinclude:: ../../examples/providers/factory_delegation.py .. literalinclude:: ../../examples/providers/factory_delegation.py
:language: python :language: python
Factory providers specialization
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:py:class:`Factory` provider could be specialized for any kind of needs via
declaring its subclasses.
One of such features is a limitation to :py:class:`Factory` provided type:
.. literalinclude:: ../../examples/providers/factory_provided_type.py
:language: python

View File

@ -18,13 +18,9 @@ Example:
Singleton providers and injections Singleton providers and injections
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:py:class:`Singleton` providers use :py:class:`Factory` providers for first :py:class:`Singleton` provider extends :py:class:`Factory` provider, so, all
creation of specified class instance, so, all of the rules about injections of the rules about injections are the same, as for :py:class:`Factory`
are the same, as for :py:class:`Factory` providers. provider.
.. image:: /images/providers/singleton_internals.png
:width: 80%
:align: center
.. note:: .. note::
@ -73,3 +69,14 @@ Example:
.. literalinclude:: ../../examples/providers/singleton_delegation.py .. literalinclude:: ../../examples/providers/singleton_delegation.py
:language: python :language: python
Singleton providers specialization
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:py:class:`Singleton` provider could be specialized for any kind of needs via
declaring its subclasses.
One of such features is a limitation to :py:class:`Singleton` provided type:
.. literalinclude:: ../../examples/providers/singleton_provided_type.py
:language: python

View File

@ -0,0 +1,35 @@
"""`Factory` specialization for limitation to provided type example."""
from dependency_injector import providers
from dependency_injector import errors
class BaseService(object):
"""Base service class."""
class UsersService(BaseService):
"""Users service."""
class PhotosService(BaseService):
"""Photos service."""
class ServiceProvider(providers.Factory):
"""Service provider."""
provided_type = BaseService
# Creating several service providers with BaseService instances:
users_service_provider = ServiceProvider(UsersService)
photos_service_provider = ServiceProvider(PhotosService)
# Trying to create service provider with not a BaseService instance:
try:
some_service_provider = ServiceProvider(object)
except errors.Error as exception:
print exception
# __main__.ServiceProvider can provide only
# <class '__main__.BaseService'> instances

View File

@ -0,0 +1,35 @@
"""`Singleton` specialization for limitation to provided type example."""
from dependency_injector import providers
from dependency_injector import errors
class BaseService(object):
"""Base service class."""
class UsersService(BaseService):
"""Users service."""
class PhotosService(BaseService):
"""Photos service."""
class ServiceProvider(providers.Singleton):
"""Service provider."""
provided_type = BaseService
# Creating several service providers with BaseService instances:
users_service_provider = ServiceProvider(UsersService)
photos_service_provider = ServiceProvider(PhotosService)
# Trying to create service provider with not a BaseService instance:
try:
some_service_provider = ServiceProvider(object)
except errors.Error as exception:
print exception
# __main__.ServiceProvider can provide only
# <class '__main__.BaseService'> instances