将B类注入到另外一个A类之中,是不是只需要在B类上面使用@inject就可以了?

将B类注入到另外一个A类之中,是不是只需要在B类上面使用@inject就可以了?

@inject

@dataclass

class BuiltinToolService:

    """内置工具服务"""

    builtin_provider_manager: BuiltinProviderManager


    def get_builtin_tools(self) -> list:

        """获取LLMOps项目中的所有内置提供商+工具对应的信息"""

        # 1.获取所有的提供商

        providers = self.builtin_provider_manager.get_providers()

        # 2.遍历所有的提供商并提取工具信息

        builtin_tools = []

        for provider in providers:

            provider_entity = provider.provider_entity

            builtin_tool = {

                **provider_entity.model_dump(exclude=["icon"]),

                "tools": []

            }

以上是B类的代码,需要将这个BuiltinToolService注入到A类BuiltinToolHandler中:


@inject

@dataclass

class BuiltinToolHandler(object):

    """内置工具处理器"""

    builtin_tool_service: BuiltinToolService


    def get_builtin_tools(self):

        """获取LLMOps所有内置工具信息+提供商信息"""

        builtin_tools = self.builtin_tool_service.get_builtin_tools()

        pass

发现A类BuiltinToolHandler也有@inject,BuiltinToolHandler这里的@inject是不是可以不用写?


正在回答 回答被采纳积分+1

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

1回答
泽辉呀 7天前

是。但是要确保这个函数有构造函数,要不然@inject识别不了,而且注入的这个参数对应的类必须有实例化过,否则也会报错。课程中的@dataclass装饰后,就不用写构造函数,所以这两个如果不搭配使用的话,必须写上构造函数,否则会报错。

  • 提问者 慕雪7494860 #1

    而且注入的这个参数对应的类必须有实例化过,否则也会报错------但是在课程中并未发现注入的这个BuiltinToolService这个类被实例化了(只有self.builtin_tool_service.get_builtin_tools()这种直接调用的)。为什么也没有报错?

    3天前
  • 泽辉呀 回复 提问者 慕雪7494860 #2
    因为这个类的参数都是可以注入实现的,所以就不需要手动实例化哈
    20小时前
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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