evoid-di
Dependency injection engine — Intent Handler system
Quick Start • Intent Handler • Three Levels • API
Quick Start
pip install evoid-di
Method 1: Intent Handler (Recommended)
from evoid_di import register_handlers
# Register DI engine as Intent handlers
register_handlers(
rules={"notifier": {"default": "memory"}},
implementations={"memory": lambda: MemoryNotifier()},
)
Method 2: Direct API
from evoid_di import DIEngine
di = DIEngine()
di.register("db", lambda: create_db("app.db"))
db = di.resolve("db")
Intent Handler
evoid-di registers dependency resolution as Intent handlers.
Three Levels
Level 1: Simple
Name-based resolution. One factory, one instance.
from evoid_di import DIEngine
di = DIEngine()
di.register("db", lambda: create_db("app.db"))
db = di.resolve("db")
Level 2: Scoped
Control instance lifetime per dependency.
di = DIEngine()
# Singleton — one instance for everyone
di.register("db", create_db, scope="singleton")
# Transient — new instance every time
di.register("logger", create_logger, scope="transient")
# Per-user — one instance per user
di.register("session", create_session, scope="per_user")
db = di.resolve("db")
session = di.resolve("session", user_id="user_123")
Level 3: Context-Aware
Route implementations based on Intent level, metadata, or user.
from evoid_di import DIEngine, Rule, RuleSet
di = DIEngine(
rules_config={
"notifier": {
"scope": "singleton",
"default": "memory_notifier",
"rules": [
{"when": {"level": "CRITICAL"}, "then": "email_sender"},
{"when": {"level": "STANDARD"}, "then": "slack_sender"},
],
}
},
implementations={
"memory_notifier": lambda: MemoryNotifier(),
"email_sender": lambda: EmailSender(),
"slack_sender": lambda: SlackSender(),
},
)
notifier = await di.resolve_async("notifier", ctx)
Configuration
TOML
[engines]
di = "di"
[engines.options.di]
rules = {"notifier": {"default": "memory"}}
implementations = {"memory": "my_module:create_notifier"}
API
register_handlers(rules, implementations, services)
Register DI engine as Intent handlers.
DIEngine Methods
| Method | Signature | Description |
|---|---|---|
register |
register(name, factory, scope="transient") |
Register a factory |
resolve |
resolve(name, user_id=None) |
Synchronous resolve |
resolve_async |
async resolve_async(name, ctx) |
Async resolve with context |
inject |
inject(ctx, service_name, key=None) |
Resolve and inject into ctx.deps |
Scopes
| Scope | Behavior |
|---|---|
singleton |
One instance, shared everywhere |
transient |
New instance on every resolve |
per_user |
One instance per user_id |
Dependencies
evoid>=0.4.0
Links
License
MIT
Release files for evoid-di 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| evoid_di-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Release files / evoid_di-0.1.0-py3-none-any.whl
| Download URL | evoid_di-0.1.0-py3-none-any.whl |
|---|---|
| Size | 8.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
51ef44987956488b4ef9fa9b482e7d7c8d1b8ccb54b7133302439c059fe6cf47
|
|
BLAKE2b-256 checksum How to use checksums |
58dd097324fbe672b9df8c4b42caa6adeb6d4fb877eda7696b9c81b7a64e290b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|