自定义构造函数注入之debug启动修改依赖注入类逻辑并不走热更新情况

taozywu

先提条件:

  1. webman1.4

  2. 自定义构造函数注入

  3. debug模式启动

  4. 配置按照手册配置如下

    return [
    // ... 这里忽略了其它配置
    
    app\test\service\Mailer::class =>  new app\test\service\Mailer('192.168.1.11', 25);
    ];
  5. 尝试在依赖注入类中修改如下

<?php
namespace app\test\service;

class Mailer
{
    private $smtpHost;
    private $smtpPort;

    public function __construct($smtp_host, $smtp_port)
    {
        $this->smtpHost = $smtp_host;
        $this->smtpPort = $smtp_port;
    }

    public function mail($email, $content)
    {
        // 发送邮件代码省略
        // 试错如下 随意改下返回
        //return $this->smtpHost."=AAAA=".$this->smtpPort."=".$email;
        return $this->smtpHost."=WWWW=".$this->smtpPort."=".$email;
    }
}

6.浏览器访问发现返回值并未及时更新,只有将服务重启动才会更新

===
再反复尝试了很多次问题依旧,后发现可以采用几个办法来处理

  1. 自定义接口注入直接解决,省略不具体描述了
  2. 自定义构造函数注入方式下修改配置如下
return [
    // ... 这里忽略了其它配置
    app\test\service\Mailer::class =>  function () {
        return new app\test\service\Mailer('192.168.1.11', 25);
    }
]

当然如上写法也是借鉴了自定义接口注入对应的配置写法,目前访问正常!未去深入挖掘,暂不清楚有无bug。

===
以上也请各位尝试排查一下!

955 1 0
1个回答

taozywu

通过查阅php-di手册

  1. 也可以使用如下配置
<?php
return [
    app\test\service\Mailer::class => DI\autowire()
        ->constructorParameter('smtp_host', '192.168.1.11')
        ->constructorParameter('smtp_port', 25),
];
  • 暂无评论
年代过于久远,无法发表回答
×
🔝