2015-11-04 75 views
3

面對Laravel的IoC和Singleton問題。Laravel 5.1 Singleton始終是新實例

我有以下的單例類:

class ConcreteClass 
{ 
    function __construct() {Log::info('I iz created...');} 
} 

和下面的服務提供商:

class ConcreteClassServiceProvider extends ServiceProvider 
{ 
    public function register() 
    { 
     $this->app->singleton('ConcreteClass', function() { 
      return new ConcreteClass(); 
     }); 
    } 
} 

但是每App::make('ConcreteClass')public function __construct(ConcreteClass $concrete)在一個請求將導致日誌有I iz created...這這使得人們非常懷疑Laravel中的單身事物​​的作用。我很可能是錯誤的配置。請幫助我。謝謝。

回答

0

我不知道你如何使用你的實例,但它可能是一個命名空間的事情。當我嘗試通過指定完整路徑來實例化我的單例時,例如:

@inject('foo', 'App\.....\FooSingleton'); 

它沒有工作。

我只指定名稱不帶路徑做到這一點,即:

@inject('foo', 'FooSingleton'); 

爲什麼?我不知道。對我來說,這仍然是一個謎。

+0

感謝您的回覆,我嘗試了一下您建議的命名空間,並且它的工作部分是成功的。顯然使用App :: make('SingletonNameAsPerServiceProvider');作品。部分工作,因爲當它使用App :: make進行訪問時,或者在刀片模板中使用@inject時它可以工作。但一些如何通過另一個類請求時,它似乎不會作爲單例啓動。但它在大多數情況下都有效。將此標記爲答案:) –