Cullinan 依赖注入快速参考¶
版本: v0.90
作者: Plumeink
基本用法¶
1. 定义服务¶
from cullinan.service import service, Service
@service
class UserService(Service):
def __init__(self):
super().__init__()
self.name = "UserService"
def get_user(self, user_id):
return {"id": user_id, "name": "John"}
2. 注入服务到 Controller¶
from cullinan.controller import controller, get_api
from cullinan.core import Inject, InjectByName
@controller(url='/api')
class UserController:
# 方式1: 类型注解(推荐)
user_service: UserService = Inject()
# 方式2: 显式指定名称
auth_service = InjectByName('AuthService')
# 方式3: 可选依赖
cache_service = InjectByName('CacheService', required=False)
3. 使用注入的服务¶
from cullinan.controller import controller, get_api
from cullinan.core import Inject
from cullinan.params import Path
@controller(url='/api')
class UserController:
user_service: UserService = Inject()
@get_api(url='/users/{user_id}')
async def get_user(self, user_id: int = Path()):
user = self.user_service.get_user(user_id)
return user
打包应用配置¶
使用显式注册(推荐)¶
from cullinan import configure
from my_app.service.user_service import UserService
from my_app.service.auth_service import AuthService
from my_app.controller.user_controller import UserController
# 在 run() 之前配置
configure(
explicit_services=[
UserService,
AuthService,
],
explicit_controllers=[
UserController,
]
)
from cullinan.application import run
run()
PyInstaller 配置¶
# your_app.spec
hiddenimports=[
'my_app.service.user_service',
'my_app.service.auth_service',
],
datas=[
('my_app', 'my_app'),
],
Nuitka 配置¶
nuitka --include-package=my_app \
--include-module=my_app.service.user_service \
your_app.py
故障排查¶
| 问题 | 解决方案 |
|---|---|
| 依赖为 None | 确保服务使用 @service 装饰器 |
| 找不到服务 | 检查服务名称是否匹配(区分大小写) |
| 循环依赖 | 使用 InjectByName() 进行延迟解析 |
| 注入不生效 | 确保类继承自 Service 或 Controller |