FastInject: easy Python dependency injection
FastInject provides easy dependency injection for Python that makes you code decoupled, testable, uncomplicated and more readable.
Decorate your services with the @injectable
decorator and decorate your function with @inject
. Done!
Your function will now be injected with instances of the required service.
pip install fastinject
Table of Contents
Main Features
- 🐍 Pure Python
- 🤸 Flexible
- 🎩 Tailor-made for your app
- 👨🎨 Easy to use with decorators
How to
Injecting services
Inject services that depend on one another
Use the service registy imperatively to get and set dependencies on the fly
Use multiple registries?
Register similar services?
Usage Example
Below details a
Step 1: Declare service to be injectable
We have a service that we want to inject, so we mark it injectable
with a decorator:
import time, datetime
from fastinject import injectable
@injectable()
class TimeStamp:
ts: float
def __init__(self) -> None:
self.ts = time.time()
@property
def datetime_str(self) -> str:
return datetime.datetime.fromtimestamp(self.ts).strftime("%Y-%m-%d %H:%M:%S")
Step 2: Use the service in a function that is injected in
from fastinject import inject
@inject()
def function_with_injection(ts: TimeStamp):
print(f"In the injected function, the current time is {ts.datetime_str}.")
if __name__ == "__main__":
function_with_injection()
Installation
pip install fastinject
The source code is currently hosted on GitHub at:
https://github.com/mike-huls/fastinject
Binary installers for the latest released version are available at the Python
Package Index (PyPI).
Dependencies
FastInject has one major dependency: injector
. FastInject aims to build on injector
by making it easier to use.
License
MIT
Documentation
🔨 Under construction
Development
Find the changelog and list of upcoming features here.
Contributions are always welcome; feel free to submit bug reports, bug fixes, feature requests, documentation improvements or enhancements!
Go to Top