Welcome to PyDio’s documentation!¶
PyDio is a dependency injection library for Python.
It aims to be simple, yet still powerful, allowing you to feed dependencies inside your application in a flexible way. PyDio design is based on simple assumption, that dependency injection can be achieved using simple key-to-function map, where key specifies type of object you want to inject and function is a factory function that creates instances of that type.
In PyDio, this is implemented using providers and injectors. You use providers to configure your key-to-function mapping, and then you use injectors to perform a lookup of a specific key and creation of the final object.
Here’s a simple example:
import abc from pydio.api import Provider, Injector provider = Provider() @provider.provides('greet') def make_greet(): return 'Hello, world!' def main(): injector = Injector(provider) greet_message = injector.inject('greet') print(greet_message)
And if you now call
main() function, then the output will be following:
Support for any hashable keys: class objects, strings, ints etc.
Support for any type of object factories: function, coroutine, generator, asynchronous generator.
Automatic resource management via generator-based factories (similar to pytest’s fixtures)
Multiple environment support: testing, development, production etc.
Limiting created object’s lifetime to user-defined scopes: global, application, use-case etc.
No singletons used, so there is no global state…
…but you still can create global injector on your own if you need it :-)
- API Reference