使用dependency_injector进行依赖注入时出现AttributeError: 'Provide' object has no attribute 'create_user'错误求助
使用dependency_injector进行依赖注入时出现AttributeError: 'Provide' object has no attribute 'create_user'错误求助
嘿,我之前也碰到过类似的依赖注入问题,看了你的代码和报错信息,大概率是容器没有正确装配导致的,给你一步步说怎么解决:
错误原因分析
你看到的AttributeError是因为Provide[Container.user_service]没有被解析成实际的UserService实例,而是保留了Provide对象本身,自然调用不了create_user方法。问题核心出在容器的初始化和装配环节。
具体解决步骤
1. 正确初始化并装配容器
修改你的main.py,一定要调用容器的wire()方法,这是让依赖注入系统把Provide对象替换成实际服务实例的关键步骤:
import uvicorn from fastapi import FastAPI from user.interface.controllers.user_controller import router as user_routers from fastapi.exceptions import RequestValidationError from fastapi.requests import Request from fastapi.responses import JSONResponse from containers import Container # 初始化容器并执行装配 container = Container() container.wire(packages=["user"]) app = FastAPI() app.container = container app.include_router(user_routers)
2. 确保控制器的依赖注入写法正确
检查你的user_controller.py,确认导入和注解都没问题:
from fastapi import Depends, Router from dependency_injector.wiring import inject, Provide from containers import Container from user.application.user_service import UserService # 记得导入你的Pydantic请求体模型 from user.interface.schemas.user_schema import CreateUserBody router = Router() @router.post("", status_code=201) @inject def create_user( user: CreateUserBody, user_service: UserService = Depends(Provide[Container.user_service]), ): created_user = user_service.create_user( name=user.name, email=user.email, password=user.password ) return created_user
3. 版本兼容性排查(如果上面两步没用)
如果还是报错,可能是版本不兼容的问题。建议升级到稳定版本:
pip install --upgrade dependency-injector fastapi
推荐使用dependency_injector >= 4.40.0和FastAPI >= 0.100.0的组合。
额外验证数据上传的建议
当依赖注入的问题解决后,你可以用FastAPI自带的/docs接口或者Postman测试:
- 检查请求体的字段是否和
CreateUserBody模型完全匹配 - 确认
UserService.create_user方法正确调用了UserRepository的保存逻辑 - 查看数据库是否有新数据写入,确保整个数据链路是通的
备注:内容来源于stack exchange,提问作者정기홍
相关产品推荐
相关产品推荐

