2015-11-04 36 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时它可以工作。但一些如何通过另一个类请求时,它似乎不会作为单例启动。但它在大多数情况下都有效。将此标记为答案:) –