简体中文 English 繁體中文 日本語 Русский
本文为静态镜像,内容以交互版为准 在交互式文档中心打开 →

ErisPulse.Core.di 模块


模块概述

ErisPulse 依赖注入模块

为各处理器注入点(命令处理器 / 事件处理器 / 生命周期钩子 / 路由处理器)提供 统一的声明式依赖注入:

提示

  1. 依赖函数的第一个参数是注入点上下文对象——命令/事件场景为 Event, 生命周期钩子为事件 data,路由场景为 HttpRequest / SseEmitter
  2. args= / options= 参数声明与依赖注入参数重名时注册期抛 ValueError(fail-fast)
  3. FastAPI 承载的 HTTP 路由请使用 FastAPI 原生 fastapi.Depends(生态成熟、 支持请求级缓存);ErisPulse.Core.Depends 覆盖框架自有分发链路

函数列表

extract_depends(func: Callable)

注册期提取处理器签名中以 Depends(...) 为默认值的参数(fail-fast)

在处理器注册时调用一次(命令装饰器 / BaseEventHandler.register / lifecycle.register / 路由注册),分发期零反射开销。

示例:

>>> extract_depends(admin)
{"db": Depends(dependency=<function get_db>)}

async resolve_depends(depends: dict[str, Depends], ctx: Any)

分发期解析依赖:以上下文对象调用各依赖函数,返回处理器关键字参数

同步依赖直接调用;异步依赖依次 await。任一依赖抛出的异常原样向上 传播,由注入点的统一错误路径处理(与处理器自身异常同口径)。

请求级缓存(默认开启):处于缓存作用域内(事件分发链)且声明 use_cache=True 时,相同依赖函数只解析一次、结果在整次事件内共享; use_cache=False 或不在作用域内(lifecycle / 路由独立调用链)时 每次解析。


async call_with_depends(func: Callable)

以 Depends 注入调用模块生命周期方法(on_load / on_unload 等)

供模块加载器调用:上下文对象为第一实参(事件数据 dict,如 {"module_name": ...})。同步方法直接调用,async 方法 await; 依赖声明的解析失败原样向上传播(on_load 失败即加载失败,on_unload 失败由调用方记录日志)。


call_with_depends_sync(func: Callable)

同步上下文版本的 Depends 注入调用(emit_sync / 同步 disable 等)

仅支持同步依赖;声明了异步依赖时抛 TypeError(携带本地化原因), 由调用方决定跳过或降级。


类列表

class Depends

依赖声明标记(作为处理器参数默认值使用)

示例:

>>> async def get_db(event):
...     return await sdk.module.call("DB", "get_session")
>>> @command("admin")
... async def admin(event, db=Depends(get_db)):
...     ...

方法列表

module(module_name: str, method: str)

声明模块服务依赖(语法糖):等价于在依赖函数内调用 sdk.module.call(...)

示例:

>>> @command("admin")
... async def admin(event, db=Depends.module("DB", "get_session")):
...     ...