【问题标题】:Laravel singleton is always giving new instanceLaravel 单例总是提供新的实例
【发布时间】:2021-05-17 19:03:39
【问题描述】:

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(),但都是一样的。

【问题讨论】:

    标签: singleton laravel-6


    【解决方案1】:

    需要写:

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

    代替:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      相关资源
      最近更新 更多