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

這個問題很頭疼,控制器構造注入始終為單例

wangerwu

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

// 安裝webman框架
composer create-project workerman/webman
// 進入目錄
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, // 控制器復用已關閉
]

config/container.php

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

·
·
·

構造注入時 IndexController.php 代碼如下

<?php

namespace app\controller;

use app\Test;

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

    public function index()
    {
    }
}

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

當控制器方法注入時 IndexController.php代碼如下

<?php

namespace app\controller;

use app\Test;

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

控制臺輸出(如我預期一致,每次新實例):
string(15) "執(zhí)行了構造"
string(9) "獲取get"
string(15) "執(zhí)行了構造"
string(9) "獲取get"
string(15) "執(zhí)行了構造"
string(9) "獲取get"

已做嘗試:

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

在dependence.php配置為非單例,控制器構造仍然為單例。

·
·

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

控制器構造注入始終為單例。

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

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

1114 1 1
1個回答

walkor 打賞

應該是PHP-DI內(nèi)部復用了實例。寫個腳本測試下類似如下代碼

$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

    老哥,你給的這個測試腳本,放在控制器構造或方法中結果都是一樣的,沒有復用,正常的。

  • 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);

    結果

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

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

  • walkor 2024-10-29

    非常感謝

  • 愛吃魚 2025-03-05

    這個問題最終怎么解決的?

  • 愛吃魚 2025-03-05

    我也遇到了這個問題

??