首页 > 解决方案 > Laravel 单例总是提供新的实例

问题描述

AppServiceProvider.php:

    public function register()
{
    $this->app->singleton('FacebookConversionConfigService', function($app)
    {
        return new FacebookConversionConfigService();
    });
}

FacebookConversionConfigService.php:

class FacebookConversionConfigService {

    public function __construct() {
        \Log::debug(rand(0, 999999));
        \Log::debug(spl_object_id($this));
    }
}

控制器 :

(resolve(FacebookConversionConfigService::class));
(resolve(FacebookConversionConfigService::class));

在日志中我得到不同的数据:

[2021-05-17 14:56:56] local.DEBUG: 516  
[2021-05-17 14:56:56] local.DEBUG: 431890  
[2021-05-17 14:56:56] local.DEBUG: 564  
[2021-05-17 14:56:56] local.DEBUG: 132296  
[2021-05-17 14:56:56] local.DEBUG: 519  
[2021-05-17 14:56:56] local.DEBUG: 469242  
[2021-05-17 14:56:56] local.DEBUG: 589  
[2021-05-17 14:56:56] local.DEBUG: 543196  
[2021-05-17 14:56:56] local.DEBUG: 601

但它应该是一样的。为什么每次调用构造函数?在单例中,它应该只被调用一次。我试过resolve()、app(),但同样的事情。

标签: singletonlaravel-6

解决方案


它需要写:

$this->app->singleton(FacebookConversionConfigService::class, function($app)

代替:

$this->app->singleton('FacebookConversionConfigService', function($app)

推荐阅读