You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel依赖注入失效:AppServiceProvider注册后实例化类报错

问题分析与解决

你遇到的问题核心是:手动用new关键字实例化类时,Laravel的服务容器不会介入依赖注入。

你在服务提供者里注册的SocialChannelContract绑定,只有当通过Laravel容器来创建类A的实例时,容器才会自动帮你注入对应的MyChannel实例。而你直接写new A($callBackQueryDVO)是PHP原生的实例化方式,容器完全不会参与其中,所以PHP会严格按照类A的构造函数要求,提示你缺少第一个参数。

给你三种可行的解决办法:

  1. 通过容器的make方法创建实例
    这是最符合Laravel依赖注入设计的方式,容器会自动注入SocialChannelContract的实现,同时你可以传递动态的CallBackQueryDVO参数:

    return app()->make(A::class, ['message' => $callBackQueryDVO]);
    

    也可以用更简洁的辅助函数:

    return make(A::class, ['message' => $callBackQueryDVO]);
    
  2. 在容器管理的类中通过方法注入
    如果你的代码本身就在Laravel容器管理的类里(比如控制器、自定义服务类),可以直接通过方法参数注入类A的实例,不过这种方式适合不需要动态传递CallBackQueryDVO的场景:

    public function handle(A $a)
    {
        // 这里的$a已经是容器注入好依赖的实例
    }
    
  3. 手动获取依赖后再new
    如果你坚持要用new关键字,那需要自己从容器中取出SocialChannelContract的实例,再传入构造函数:

    $channel = app()->make(SocialChannelContract::class);
    return new A($channel, $callBackQueryDVO);
    

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:01:54