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

這個(gè)問題很頭疼,控制器構(gòu)造注入始終為單例

wangerwu

就不貼我的代碼了,這里直接新安裝webman測(cè)試。

// 安裝webman框架
composer create-project workerman/webman
// 進(jìn)入目錄
cd webman
// 安裝依賴注入 PHP-DI
composer require psr/container ^1.1.1 php-di/php-di ^6.3 doctrine/annotations ^1.14

config/app.php

return [
  省略其他……
  'controller_reuse' => false, // 控制器復(fù)用已關(guān)閉
]

config/container.php

$builder = new \DI\ContainerBuilder();
$builder->addDefinitions(config('dependence', []));
$builder->useAutowiring(true);
$builder->useAnnotations(true);
return $builder->build();

·
·
·

構(gòu)造注入時(shí) IndexController.php 代碼如下

<?php

namespace app\controller;

use app\Test;

class IndexController
{
    public function __construct(Test $test)
    {
        var_dump($test->get());
    }

    public function index()
    {
    }
}

控制臺(tái)輸出(始終為單例):
string(15) "執(zhí)行了構(gòu)造"
string(9) "獲取get"
string(9) "獲取get"
string(9) "獲取get"

當(dāng)控制器方法注入時(shí) IndexController.php代碼如下

<?php

namespace app\controller;

use app\Test;

class IndexController
{
    public function index(Test $test)
    {
        var_dump($test->get());
    }
}

控制臺(tái)輸出(如我預(yù)期一致,每次新實(shí)例):
string(15) "執(zhí)行了構(gòu)造"
string(9) "獲取get"
string(15) "執(zhí)行了構(gòu)造"
string(9) "獲取get"
string(15) "執(zhí)行了構(gòu)造"
string(9) "獲取get"

已做嘗試:

升級(jí)PHP-DI為7(控制器構(gòu)造注入依然為單例)

在dependence.php配置為非單例,控制器構(gòu)造仍然為單例。

·
·

有知道怎么回事的老哥么?

控制器構(gòu)造注入始終為單例。

控制器方法注入除了注入類,其他也都是單例。比如:A -> B、C、D

只有A是新實(shí)例,B、C、D均為單例。

1245 1 1
1個(gè)回答

walkor 打賞

應(yīng)該是PHP-DI內(nèi)部復(fù)用了實(shí)例。寫個(gè)腳本測(cè)試下類似如下代碼

$builder = new \DI\ContainerBuilder();
$builder->addDefinitions(config('dependence', []));
$builder->useAutowiring(true);
$builder->useAnnotations(true);
$container = $builder->build();
$container->make($class);
$container->make($class);
  • wangerwu 2024-10-29

    老哥,你給的這個(gè)測(cè)試腳本,放在控制器構(gòu)造或方法中結(jié)果都是一樣的,沒有復(fù)用,正常的。

  • walkor 2024-10-29
    <?php
    
    require __DIR__ . '/vendor/autoload.php';
    
    class IndexController
    {
        public function __construct(Test $test)
        {
            var_dump($test->get());
        }
    }
    
    class Test
    {
        public function __construct()
        {
            echo "Test __construct\n";
        }
        public function get()
        {
            return 'test';
        }
    }
    
    $builder = new \DI\ContainerBuilder();
    $builder->addDefinitions(config('dependence', []));
    $builder->useAutowiring(true);
    $builder->useAnnotations(true);
    $container = $builder->build();
    $container->make(IndexController::class);
    $container->make(IndexController::class);
    $container->make(IndexController::class);

    結(jié)果

     php .\container.php
    Test __construct
    string(4) "test"
    string(4) "test"
    string(4) "test"

    PHP-DI make的時(shí)候構(gòu)造函數(shù)里依賴的類實(shí)例被復(fù)用了

  • walkor 2024-10-29

    非常感謝

  • 愛吃魚 2025-03-05

    這個(gè)問題最終怎么解決的?

  • 愛吃魚 2025-03-05

    我也遇到了這個(gè)問題

??