Home

Awesome

Build pypi versions codecov license

Implementation of dependency injection for Python 3

Features:

This library is freely inspired by .NET Standard Microsoft.Extensions.DependencyInjection implementation (ref. MSDN, Dependency injection in ASP.NET Core, Using dependency injection in a .Net Core console application). The ContainerProtocol for v2 is inspired by punq.

Installation

pip install rodi

Efficient

rodi works by inspecting code once at runtime, to generate functions that return instances of desired types - as long as the object graph is not altered. Inspections are done either on constructors (__init__) or class annotations. Validation steps, for example to detect circular dependencies or missing services, are done when building these functions, so additional validation is not needed when activating services.

Flexible

rodi offers two code APIs:

For this reason, the examples report two ways to achieve certain things.

Examples

For examples, refer to the examples folder.

Recommended practices

All services should be configured once, when an application starts, and the object graph should not be altered during normal program execution. Example: if you build a web application, configure the object graph when bootstrapping the application, avoid altering the Container configuration while handling web requests.

Aim at keeping the Container and service graphs abstracted from the front-end layer of your application, and avoid mixing runtime values with container configuration. Example: if you build a web application, avoid if possible relying on the HTTP Request object being a service registered in your container.

Service life style:

Usage in BlackSheep

rodi is used in the BlackSheep web framework to implement dependency injection for request handlers.

Documentation

Under construction. 🚧