mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-29 21:14:00 +03:00
52 lines
1.8 KiB
ReStructuredText
52 lines
1.8 KiB
ReStructuredText
Structure of Dependency Injector
|
|
--------------------------------
|
|
|
|
.. meta::
|
|
:keywords: Python,DI,Dependency injection,IoC,Inversion of Control
|
|
:description: This article describes "Dependency Injector" framework
|
|
components and their interaction between each other.
|
|
Catalogs, providers and injections are the former
|
|
components of the framework.
|
|
|
|
Current section describes *Dependency Injector* main entities and their
|
|
interaction between each other.
|
|
|
|
.. image:: /images/internals.png
|
|
:width: 100%
|
|
:align: center
|
|
|
|
There are 3 main entities: providers, injections and catalogs.
|
|
|
|
+ All of the entities could be used in composition with each other or
|
|
separatelly.
|
|
+ Each of the entities could be extended via specialization.
|
|
|
|
Providers
|
|
~~~~~~~~~
|
|
|
|
Providers are strategies of accesing objects. For example,
|
|
:py:class:`dependency_injector.providers.Factory` creates new instance
|
|
of provided class every time it is called.
|
|
:py:class:`dependency_injector.providers.Singleton` creates provided
|
|
instance once and returns it on every next call. Providers could be
|
|
injected into each other. Providers could be overridden by another
|
|
providers. Base class is -
|
|
:py:class:`dependency_injector.providers.Provider`.
|
|
|
|
Injections
|
|
~~~~~~~~~~
|
|
|
|
Injections are instructions for making dependency injections
|
|
(there are several ways how they could be done). Injections are used
|
|
mostly by :py:class:`dependency_injector.providers.Factory` and
|
|
:py:class:`dependency_injector.providers.Singleton` providers, but
|
|
these are not only cases. Base class is -
|
|
:py:class:`dependency_injector.injections.Injection`.
|
|
|
|
Catalogs
|
|
~~~~~~~~~
|
|
|
|
Catalogs are collections of providers. They are used for grouping
|
|
of providers by some principles. Base class is -
|
|
:py:class:`dependency_injector.catalogs.DeclarativeCatalog`.
|