singleton - 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(),但同样的事情。
解决方案
它需要写:
$this->app->singleton(FacebookConversionConfigService::class, function($app)
代替:
$this->app->singleton('FacebookConversionConfigService', function($app)
推荐阅读
- mysql - CentOS7启动mysql,启动mysql.service失败:Unit not found
- angular - 在 ionic 3 angular 4 应用程序中实现角度数据表时未定义 $
- asp.net-mvc - 需要通过文本框和按钮向 DropDownList 添加新选项
- cuda - CUDA 内核调用: kernel<<<...,...>>> 其中第三个“<”带有红色下划线
- biztalk - 将 BizTalk BAM 事件“转发”到云
- java - 在没有迭代器的二叉搜索树上实现 JUnit 测试?
- python - 如何为基本向量/张量乘法编写 Keras 层
- apache-kafka - KAFKA 1.0 - 为主题分区获取数据的未知错误
- oracle - PL/SQL 函数显示错误 ::: ORA-06575: Package or function FUN_MIN is in an invalid state
- c - 结构数组的最短路径