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. Providers and containers 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 2 main entities: providers & containers. Providers ~~~~~~~~~ Providers are strategies of accessing 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. Base class is - :py:class:`dependency_injector.providers.Provider`. Providers could be: + Injected into each other. + Overridden by each other. + Extended. Containers ~~~~~~~~~~ Containers are collections of providers. They are used for grouping of providers by some principles. Base class is - :py:class:`dependency_injector.containers.DeclarativeContainer`. Containers could be: + Overridden by each other. + Copied from each other. + Extended.