依赖注入 循环引入报错,请问这种情况怎么解决?

bxsec


不知道为什么会出现这种情况

1255 2 0
2个回答

Tinywan

去看看php-di是如何使用的

  • bxsec 2022-06-16

    可是官方文档实例也没跑起来,还需要看php-di文档?

  • bxsec 2022-06-16

    config/container.php 配置:
    $builder = new \DI\ContainerBuilder();
    $builder->addDefinitions(config('dependence', []));
    $builder->useAutowiring(true);
    $builder->useAnnotations(true);
    return $builder->build();

walkor

发一个能重现这个问题的精简demo压缩包,发到我邮箱 walkor#workerman.net

  • bxsec 2022-06-16

  • walkor 2022-06-16

    测试了下,目前看确实不能这样循环引用。
    这种情况需要使用 自定义接口注入
    稍后这边完善下文档

  • bxsec 2022-06-16

    好的,谢谢大佬

  • walkor 2022-06-16

    应该是可以的,头部记得要加 use app\service\UserServiceInterface;

  • walkor 2022-06-16

    这边按照手册测试没有问题

  • bxsec 2022-06-17

    晚上我重新建一个项目试下,如果复现再给您发送下demo

  • bxsec 2022-06-17

    demo已经发送到walkor#workerman.net邮箱了

  • walkor 2022-06-17

    截图
    你没有定义这个接口导致的

  • bxsec 2022-06-17

    发送的demo中 interface和class都放在Mailer.php中

    <?php
    namespace app\service;

    interface MailerInterface
    {
    public function mail($email, $content);
    }

    class Mailer implements MailerInterface
    {
    private $smtpHost;

    private $smtpPort;
    
    public function __construct($smtp_host, $smtp_port)
    {
        $this->smtpHost = $smtp_host;
        $this->smtpPort = $smtp_port;
    }
    
    public function mail($email, $content)
    {
        // 发送邮件代码省略
        echo 'send main';
    }

    }

  • walkor 2022-06-17

    文件要单独放,不然不符合psr4规则,composer加载不到

年代过于久远,无法发表回答
🔝