Skip to main content

Dependency Injector is a dependency injection microframework for Python. It was designed to be unified, developer-friendly tool that helps to implement dependency injection pattern in formal, pretty, Pythonic way.

Dependency Injector framework key features are:

  • Easy, smart, pythonic style.

  • Obvious, clear structure.

  • Extensibility and flexibility.

  • High performance.

  • Memory efficiency.

  • Thread safety.

  • Documentation.

  • Semantic versioning.

Dependency Injector providers are implemented as C extension types using Cython.

Status

PyPi

Latest Version License

Python versions and implementations

Supported Python versions Supported Python implementations

Builds and tests coverage

Build Status Coverage Status

Github

Github watchers Github stargazers Github forks

Dependency injection

Dependency injection is a software design pattern that implements Inversion of control for resolving dependencies. Formally, if object A depends on object B, object A must not create or import object B directly. Instead of this object A must provide a way for injecting object B. The responsibilities of objects creation and dependencies injection are delegated to external code - the dependency injector.

Popular terminology of dependency injection pattern:

  • Object A, that is dependant on object B, is often called - the client.

  • Object B, that is a dependency, is often called - the service.

  • External code that is responsible for creation of objects and injection of dependencies is often called - the dependency injector.

There are several ways of how service can be injected into the client:

  • by passing it as __init__ argument (constructor / initializer injection)

  • by setting it as attribute’s value (attribute injection)

  • by passing it as method’s argument (method injection)

Dependency injection pattern has few strict rules that should be followed:

  • The client delegates to the dependency injector the responsibility of injecting its dependencies - the service(s).

  • The client doesn’t know how to create the service, it knows only interface of the service. The service doesn’t know that it is used by the client.

  • The dependency injector knows how to create the client and the service, it also knows that the client depends on the service, and knows how to inject the service into the client.

  • The client and the service know nothing about the dependency injector.

Dependency injection pattern provides the following advantages:

  • Control on application structure.

  • Decreased coupling between application components.

  • Increased code reusability.

  • Increased testability.

  • Increased maintainability.

  • Reconfiguration of system without rebuilding.

Example of dependency injection

Brief example below demonstrates usage of Dependency Injector for creating several IoC containers for some example application:

"""Example of dependency injection in Python."""

import logging
import sqlite3

import boto.s3.connection

import example.main
import example.services

import dependency_injector.containers as containers
import dependency_injector.providers as providers


class Core(containers.DeclarativeContainer):
    """IoC container of core component providers."""

    configuration = providers.Configuration('config')

    logger = providers.Singleton(logging.Logger, name='example')


class Gateways(containers.DeclarativeContainer):
    """IoC container of gateway (API clients to remote services) providers."""

    database = providers.Singleton(sqlite3.connect,
                                   Core.configuration.database.dsn)

    s3 = providers.Singleton(boto.s3.connection.S3Connection,
                             Core.configuration.aws.access_key_id,
                             Core.configuration.aws.secret_access_key)


class Services(containers.DeclarativeContainer):
    """IoC container of business service providers."""

    users = providers.Factory(example.services.UsersService,
                              db=Gateways.database,
                              logger=Core.logger)

    auth = providers.Factory(example.services.AuthService,
                             db=Gateways.database,
                             logger=Core.logger,
                             token_ttl=Core.configuration.auth.token_ttl)

    photos = providers.Factory(example.services.PhotosService,
                               db=Gateways.database,
                               s3=Gateways.s3,
                               logger=Core.logger)


class Application(containers.DeclarativeContainer):
    """IoC container of application component providers."""

    main = providers.Callable(example.main.main,
                              users_service=Services.users,
                              auth_service=Services.auth,
                              photos_service=Services.photos)

Next example demonstrates run of example application defined above:

"""Run example application."""

import sys
import logging

from containers import Core, Application


if __name__ == '__main__':
    # Configure platform:
    Core.configuration.update({'database': {'dsn': ':memory:'},
                               'aws': {'access_key_id': 'KEY',
                                       'secret_access_key': 'SECRET'},
                               'auth': {'token_ttl': 3600}})
    Core.logger().addHandler(logging.StreamHandler(sys.stdout))

    # Run application:
    Application.main(uid=sys.argv[1],
                     password=sys.argv[2],
                     photo=sys.argv[3])

You can get more Dependency Injector examples in /examples directory on GitHub:

https://github.com/ets-labs/python-dependency-injector

Installation

Dependency Injector library is available on PyPi:

pip install dependency_injector

Documentation

Dependency Injector documentation is hosted on ReadTheDocs:

Feedback & Support

Feel free to post questions, bugs, feature requests, proposals etc. on Dependency Injector GitHub Issues:

https://github.com/ets-labs/python-dependency-injector/issues

Your feedback is quite important!

Release files for dependency-injector 3.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dependency-injector 3.2.2
File Size Uploaded
dependency-injector-3.2.2.tar.gz 269.7 kB Details

Release files / dependency-injector-3.2.2.tar.gz

Download URL dependency-injector-3.2.2.tar.gz
Size 269.7 kB
Tags Source
SHA-256 checksum
How to use checksums
e904516ffac2ac85ffbf5caf9a1b0e077d3ec01ca7a96d2bcd11e6a4d77df52e
BLAKE2b-256 checksum
How to use checksums
2d6e5a1d7c56d5e57382dda23cbcb53bae32f4478d904e738704b88a78fc8764
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

4.9.1

61 release files

4.9.0

61 release files

4.8.3

61 release files

4.8.2

61 release files

4.8.1

61 release files

4.8.0

61 release files

4.7.0

61 release files

4.6.1

61 release files

4.6.0

61 release files

4.5.4

56 release files

4.5.1

22 release files

4.5.0

22 release files

4.4.1

22 release files

4.4.0

22 release files

4.3.9

22 release files

4.3.8

22 release files

4.3.7

22 release files

4.3.2

56 release files

4.3.1

56 release files

4.3.0

56 release files

4.2.0

56 release files

4.1.8

56 release files

4.1.7

56 release files

4.1.6

56 release files

4.1.5

56 release files

4.1.4

56 release files

4.1.2

35 release files

4.1.1

36 release files

4.1.0

45 release files

4.0.6

45 release files

4.0.5

45 release files

4.0.4

45 release files

4.0.3

45 release files

4.0.2

45 release files

4.0.1

45 release files

3.19.0

1 release file

3.18.1

1 release file

3.18.0

1 release file

3.17.1

1 release file

3.17.0

1 release file

3.16.1

1 release file

3.16.0

1 release file

3.15.6

1 release file

3.15.5

1 release file

3.15.4

1 release file

3.15.3

1 release file

3.15.2

1 release file

3.15.1

1 release file

3.15.0

1 release file

3.14.10

1 release file

3.14.9

1 release file

3.14.8

1 release file

3.14.7

1 release file

3.14.6

1 release file

3.14.5

1 release file

3.14.4

1 release file

3.14.3

1 release file

3.14.2

1 release file

3.14.1

1 release file

3.14.0

1 release file

3.13.2

1 release file

3.13.1

1 release file

3.13.0

1 release file

3.12.4

1 release file

3.12.3

1 release file

3.12.2

1 release file

3.12.1

1 release file

3.12.0

1 release file

3.11.3

1 release file

3.11.2

1 release file

3.11.1

1 release file

3.11.0

1 release file

3.10.0

1 release file

3.9.1

1 release file

3.9.0

1 release file

3.8.2

1 release file

3.8.1

1 release file

3.8.0

1 release file

3.7.1

1 release file

3.7.0

1 release file

3.6.1

1 release file

3.6.0

1 release file

3.5.0

1 release file

3.4.8

1 release file

3.4.7

1 release file

3.4.6

1 release file

3.4.5

1 release file

3.4.4

1 release file

3.4.3

1 release file

3.4.2

1 release file

3.4.1

1 release file

3.4.0

1 release file

3.3.7

1 release file

3.3.6

1 release file

3.3.5

1 release file

3.3.4

1 release file

3.3.3

1 release file

3.3.2

1 release file

3.3.1

1 release file

3.3.0

1 release file

3.2.5

1 release file

3.2.4

1 release file

3.2.3

1 release file

This release

3.2.2 This release

1 release file

3.2.1

1 release file

3.2.0

1 release file

3.1.5

1 release file

3.1.4

1 release file

3.1.3

1 release file

3.1.2

1 release file

3.1.1

1 release file

3.1.0

1 release file

3.0.1

1 release file

3.0.0

1 release file

2.2.10

1 release file

2.2.9

1 release file

2.2.8

1 release file

2.2.7

1 release file

2.2.6

1 release file

2.2.5

1 release file

2.2.4

1 release file

2.2.3

1 release file

2.2.2

1 release file

2.2.1

1 release file

2.2.0

1 release file

2.1.1

1 release file

2.1.0

1 release file

2.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page