Skip to main content

PyPI Python License

evoid-di

Dependency injection engine — Intent Handler system

Quick StartIntent HandlerThree LevelsAPI


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)

Table of built distributions (wheels) for evoid-di 0.1.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

0.2.0

1 release file

0.1.2

1 release file

0.1.1

1 release file

This release

0.1.0 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page