Laravel 5.1 单例模式始终返回新实例

3
面对Laravel的IoC和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中的单例模式可疑。我很可能在配置方面出错了。请帮忙解决。谢谢。
1个回答

0

我不确定你如何使用实例,但可能是命名空间的问题。例如,当我尝试通过指定完整路径来实例化我的单例时:

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

它没有起作用。

我只能通过指定名称而不是路径来完成它,即:

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

为什么?我不知道。这对我来说仍然是一个谜。


谢谢您的回复,我尝试了您建议的命名空间,它部分地起作用了。显然使用 App::make('SingletonNameAsPerServiceProvider'); 可以起作用。它只能部分工作,因为当使用 App::make 或在 blade 模板中使用 @inject 时,它可以正常工作。但是当通过另一个类请求时,它似乎没有作为单例启动。但是它在大多数情况下都能工作。将这个作为答案标记 :) - J.L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接