InjectQ Documentation¶
InjectQ is a lightweight, type-friendly dependency injection library for Python focused on clarity and pragmatic integrations.
Quick example (recommended)¶
from injectq import InjectQ, inject, singleton
container = InjectQ.get_instance()
@singleton
class UserService:
def __init__(self, message: str):
self.message = message
def greet(self) -> str:
return f"Service says: {self.message}"
@inject
def main(service: UserService) -> None:
print(service.greet())
if __name__ == "__main__":
main()
Highlights¶
- Dict-like bindings and simple APIs for small projects
- Decorator and type-based injection (
@inject
,Inject[T]
) for typed code - Optional integrations for FastAPI and Taskiq (install extras as needed)
- Async factory support and request-scoped lifetimes
API patterns¶
Dict-like interface¶
from injectq import InjectQ
container = InjectQ.get_instance()
container[str] = "config_value"
container[Database] = Database()
Function/class injection¶
FastAPI integration (example)¶
from injectq import InjectQ
from injectq.integrations.fastapi import setup_fastapi, InjectAPI
container = InjectQ.get_instance()
setup_fastapi(container, app)
@app.get("/users/{user_id}")
async def get_user(user_id: int, user_service: IUserService = InjectAPI[IUserService]):
return user_service.get_user(user_id)
Taskiq integration (example)¶
from injectq import InjectQ
from injectq.integrations.taskiq import setup_taskiq, InjectTask
container = InjectQ.get_instance()
setup_taskiq(container, broker)
@broker.task()
async def save_data(data: dict, service: RankingService = InjectTask[RankingService]):
await service.save(data)
Documentation sections¶
- Getting started (installation & quick-start)
- Injection patterns (dict-style, decorator, Inject[T])
- Scopes and lifecycle (singleton, transient, request)
- Modules and providers
- Integrations (FastAPI, Taskiq)
- Testing utilities and examples
- API reference and migration guides
Contributing & License¶
See CONTRIBUTING.md
and LICENSE
for contribution rules and licensing.
Note: This repository maintains a test coverage floor of 73% enforced by CI and pytest configuration.