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

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

wangerwu

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

控制器復(fù)用已關(guān)閉,目前的解決方案是,控制器構(gòu)造傳工廠創(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),
];
871 3 2
3個(gè)回答

小Z先生

試試 dependence.php 這樣寫

<?php

use app\Test;
use app\TestInterface;

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

http://m.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

控制器生命周期
每個(gè)控制器每個(gè)進(jìn)程只會(huì)實(shí)例化一次,多個(gè)進(jìn)程實(shí)例化多次(關(guān)閉控制器復(fù)用除外,參見控制器生命周期)
控制器實(shí)例會(huì)被當(dāng)前進(jìn)程內(nèi)多個(gè)請求共享(關(guān)閉控制器復(fù)用除外)
控制器生命周期在進(jìn)程退出后結(jié)束(關(guān)閉控制器復(fù)用除外)

  • wangerwu 2024-10-25

    控制器復(fù)用已關(guān)閉的。問題是方法獲取是新實(shí)例,唯獨(dú)構(gòu)造是單例。

  • nitron 2024-10-25

    改了配置要重啟

  • wangerwu 2024-10-25

    控制器復(fù)用一直是關(guān)閉的,runtime也清除過。

  • wangerwu 2024-10-25

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

  • nitron 2024-10-25

    @walkor

walkor 打賞

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

  • wangerwu 2024-10-25

    老哥,通過控制器方法注入是新實(shí)例,控制器構(gòu)造是單例,有點(diǎn)搞不明白。
    如果php-di設(shè)為單例,控制器方法也是單例,控制器方法的注入是如php-di預(yù)期一致的,php-di設(shè)置單例就是單例,非單例就是非單例,

    唯獨(dú)控制器構(gòu)造是單例,怎么做都是單例。

  • wangerwu 2024-10-25

    控制器方法的注入是如php-di預(yù)期一致的,唯獨(dú)構(gòu)造,怎么做都是單例。

  • walkor 2024-10-25

    看到問題標(biāo)記已解決,所以問題是?解決方法是?

  • wangerwu 2024-10-25

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

  • 愛吃魚 2025-03-05

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

  • oliver. 2025-03-05

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

  • 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)實(shí)現(xiàn)方式了,謝啦。

??