繁体   English   中英

如何解决Lumen / Laravel中的单例?

[英]How to resolve singleton in Lumen/Laravel?

我有需要API密钥(APIClent.php)的类。

我想初始化APIClient.php并共享实例(单例)

我有两个需要访问初始化实例的控制器(上述)。

现在,每次我调用控制器时,它都会获得一个类的实例(APIClient),而不是获得一个存在的类(如果有的话)。

我该如何解决? 这就是我的代码的样子。

AppServiceProvider.php

public function register()
{
    $this->app->singleton(APIClient::class, function()
    {
        return new APIClient(env('API_KEY'));
    });

}

ListController.php

public function __construct(APIClient $client)
{
    //does the same thing as below
   // $this->apiClient = App(APIClient::class);

   $this->apiClient = $client;
}

web.php

就是这条线

$router->get('lists', ['uses' => 'ListController@index']);

任何提示或资源表示赞赏。

谢谢

Singleton并不意味着该对象将保留在所有客户端请求可用的内存中,直到时间结束。 这仅意味着服务器在每次请求时只会创建一次,并且如果在同一请求期间再次需要该对象,它将使用创建的对象。

对于不同的用户,单例可能会有所不同,并且可能在下一个请求时发生更改。

您的示例未展示单例的好处,因为您正在控制器的__construct中使用单例,并且此函数在每次请求时也仅被调用一次。

YOU write this : 

public function register()
{
    $this->app->singleton(APIClient::class, function()
    {
        return new APIClient(env('API_KEY'));
    });

}

each time, you call your `APICLient`, you create a new objet. 
If you want to use singleton pattern,
 just put the write code there without using `new` like 
 public function register()
{
    $this->app->singleton(APIClient::class, function()
    {
        return (env('API_KEY'));
    });
}
or Something like that.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM