From 54da9913eb7a52860782e8bf00671dba98d94838 Mon Sep 17 00:00:00 2001 From: Roman Mogilatov Date: Wed, 2 Sep 2015 17:20:19 +0300 Subject: [PATCH] Update docs about writing custom providers --- docs/images/providers/custom_provider.png | Bin 30351 -> 28689 bytes docs/providers/custom.rst | 22 +++++++++------------- examples/providers/custom_factory.py | 9 ++++----- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/docs/images/providers/custom_provider.png b/docs/images/providers/custom_provider.png index a64b0b37c2a1d0f590268e03a69e4bcf29f2793d..784c90bd2aea7dc0cbfd041c8fe1e1fa9df7fa28 100644 GIT binary patch literal 28689 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 DVlAv0 literal 30351 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 J)o479_;0itU912A diff --git a/docs/providers/custom.rst b/docs/providers/custom.rst index 26d27153..2d5374e8 100644 --- a/docs/providers/custom.rst +++ b/docs/providers/custom.rst @@ -5,27 +5,23 @@ List of *Dependency Injector* providers could be widened with custom providers. Below are some tips and recommendations that have to be met: - 1. Every custom provider has to extend base provider class - - ``dependency_injector.providers.Provider``. + 1. Every custom provider has to extend base provider class - + ``di.Provider``. 2. Cusom provider's ``__init__()`` could be overriden with only condition: - parent initializer - (``dependency_injector.providers.Provider.__init__()``) has to be called. + parent initializer (``di.Provider.__init__()``) has to be called. 3. Providing strategy has to be implemented in custom provider's ``_provide()`` method. All ``*args`` & ``**kwargs`` that will be - recieved by ``dependency_injector.providers.Provider.__call__()`` will be - transefed - to custom provider's ``_provide()``. + recieved by ``di.Provider.__call__()`` will be transefed to custom + provider's ``_provide()``. 4. If custom provider is based on some standard providers, it is better to use delegation of standard providers, then extending of them. 5. If custom provider defines any attributes, it is good to list them in ``__slots__`` attribute (as *Dependency Injector* does). It can save some memory. - 6. If custom provider deals with injections (e.g. ``Factory``, - ``Singleton`` providers), it is strongly recommended to use - ``dependency_injector.injections.Injection`` and its subclasses: - ``dependency_injector.injections.KwArg``, - ``dependency_injector.injections.Attribute`` and - ``dependency_injector.injections.Method``. + 6. If custom provider deals with injections (e.g. ``di.Factory``, + ``di.Singleton`` providers), it is strongly recommended to be + consistent with ``di.Factory``, ``di.Singleton`` and ``di.Callable`` + providers style. Example: diff --git a/examples/providers/custom_factory.py b/examples/providers/custom_factory.py index b62306bd..d1e6cbf1 100644 --- a/examples/providers/custom_factory.py +++ b/examples/providers/custom_factory.py @@ -1,7 +1,6 @@ -"""Custom `Factory` example.""" +"""Custom `di.Factory` example.""" -from dependency_injector.providers import Provider -from dependency_injector.providers import Factory +import dependency_injector as di class User(object): @@ -9,7 +8,7 @@ class User(object): """Example class User.""" -class UsersFactory(Provider): +class UsersFactory(di.Provider): """Example users factory.""" @@ -17,7 +16,7 @@ class UsersFactory(Provider): def __init__(self): """Initializer.""" - self._factory = Factory(User) + self._factory = di.Factory(User) super(UsersFactory, self).__init__() def _provide(self, *args, **kwargs):