国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

【已解決】webman控制器構造函數(shù)中依賴注入默認是單例,無法設置非單例

wangerwu

如果在方法index注入是重新創(chuàng)建實例,但是通過構造引入則是單例怎么回事。

控制器復用已關閉,目前的解決方案是,控制器構造傳工廠創(chuàng)建。

IndexController.php

<?php

namespace app\controller;

use app\TestInterface;

class IndexController
{
    private TestInterface $test;

    public function __construct(TestInterface $test)
    {
        $this->test = $test;
    }

    public function index()
    {
        var_dump('控制器 index()');
        return $this->test->get();
    }
}

dependence.php

<?php

use app\Test;
use app\TestInterface;

return [
    TestInterface::class => \DI\autowire(Test::class),
];
822 3 2
3個回答

小Z先生

試試 dependence.php 這樣寫

<?php

use app\Test;
use app\TestInterface;

return [
    TestInterface::class => function(){
        return new Test();
    },
];
nitron

http://www.wtbis.cn/doc/webman/controller.html#%E6%8E%A7%E5%88%B6%E5%99%A8%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F

控制器生命周期
每個控制器每個進程只會實例化一次,多個進程實例化多次(關閉控制器復用除外,參見控制器生命周期)
控制器實例會被當前進程內多個請求共享(關閉控制器復用除外)
控制器生命周期在進程退出后結束(關閉控制器復用除外)

  • wangerwu 2024-10-25

    控制器復用已關閉的。問題是方法獲取是新實例,唯獨構造是單例。

  • nitron 2024-10-25

    改了配置要重啟

  • wangerwu 2024-10-25

    控制器復用一直是關閉的,runtime也清除過。

  • wangerwu 2024-10-25

    重新創(chuàng)建一個webman項目,測試發(fā)現(xiàn)也是這個問題。

  • nitron 2024-10-25

    @walkor

walkor 打賞

這個要挖下PHP-DI的源碼,猜測是 dependence.php 定義的依賴都是單例

  • wangerwu 2024-10-25

    老哥,通過控制器方法注入是新實例,控制器構造是單例,有點搞不明白。
    如果php-di設為單例,控制器方法也是單例,控制器方法的注入是如php-di預期一致的,php-di設置單例就是單例,非單例就是非單例,

    唯獨控制器構造是單例,怎么做都是單例。

  • wangerwu 2024-10-25

    控制器方法的注入是如php-di預期一致的,唯獨構造,怎么做都是單例。

  • walkor 2024-10-25

    看到問題標記已解決,所以問題是?解決方法是?

  • wangerwu 2024-10-25

    想著不打擾你們了,干脆用工廠來創(chuàng)建。昨天已經(jīng)折騰半天了,大家提出的都試過。謝謝老哥

  • 愛吃魚 2025-03-05

    我也遇到了這個問題?有解決辦法不?

  • oliver. 2025-03-05

    構造函數(shù)和屬性注解注入的方法都是單例。之前被坑過,后面改成方法參數(shù)注入或通過 DI 容器來獲取實例了

  • wangerwu 2025-03-05

    我換用 Illuminate\Container\Container 了。

    <?php

    use Illuminate\Container\Container;

    $container = new Container();

    $dependence = config('dependence');

    foreach ($dependence['bind'] as $interface => $implementation) {
    $container->bind($interface, $implementation);
    }

    foreach ($dependence['singleton'] as $interface => $implementation) {
    $container->singleton($interface, $implementation);
    }

    return $container;

  • 愛吃魚 2025-03-06

    不用依賴注入了,改了傳統(tǒng)實現(xiàn)方式了,謝啦。

??