为什么这里使用先实例化,然后再进行依赖注入?

为什么这里使用先实例化,然后再进行依赖注入?



pkg.sqlalchemy SQLAlchemy
db = SQLAlchemy()

# 然后再通过拓展模块注入
from internal.extension.database_extension import db
from internal.extension.migrate_extension import migrate
from pkg.sqlalchemy import SQLAlchemy


class ExtensionModule(Module):
    """扩展模块的依赖注入"""

    def configure(self, binder: Binder) -> None:
        binder.bind(SQLAlchemy, to=db)
        binder.bind(Migrate, to=migrate)


为什么不直接使用   injector.get(SQLAlchemy) 进行依赖注入呢?
两种方式有什么使用场景的差异吗?


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

injector.get(SQLAlchemy)是根据指定的类名获取类的实例,对于SQLAlchemy来说,我们没有使用@inject进行装饰,所以这个实例并不会自己创建,就需要手动创建,并且告知injector,这个实例绑定到SQLAlchemy这个类上。


如果一个类有使用@inject进行装饰,这个类就不需要手动创建实例,因为injector可以知道怎么生成这个实例,并且将这个实例与类进行绑定。

  • 慕桂英5168734 提问者 #1

    1 课程中没有对SQLAlchemy使用@inject进行装饰,是有什么特殊原因,还是说仅仅是为了教学,说明不同方式类的注入方式区别?

    2 在真实的项目中,两种方式有什么使用场景的差异吗?

    2025-03-13 10:08:58
  • 泽辉呀 回复 提问者 慕桂英5168734 #2

    因为SQLAlchemy是在三方包里定义的,我们没办法去修改三方包中的源码信息,所以就是用了binder.bind(SQLAlchemy, to=db)的方式,一般来说,第三方依赖的库都是用这方方式定义,自己代码里定义的就是@inject进行装饰。

    2025-03-13 10:31:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
AI Agent 全栈开发工程师
  • 参与学习       522    人
  • 解答问题       411    个

全流程打造你自己的(Coze/Dify)低代码智能体开发平台;2025年入行正当时,企业急需,人才稀缺,竞争小;无论入行还是转行,首选口碑好课,门槛低、成长高

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师