代码之家  ›  专栏  ›  技术社区  ›  Arxeiss

blade@inject创建新的singleton实例

  •  1
  • Arxeiss  · 技术社区  · 6 年前

    我有breadcrumbservice,它在AppServiceProvider中注册为singleton

    public $singletons = [
        BreadcrumbService::class => BreadcrumbService::class,
    ];
    

    当我通过 __construct 方法,一切都很好。我在控制器操作和返回视图中填充面包屑。但如果我使用 @inject 指令,它创建新的实例事件,它注册为singleton。

    @inject('breadcrumbs', '\SunApp\Services\BreadcrumbService')
    @php
        var_dump(resolve(\SunApp\Services\BreadcrumbService::class)->isActive());
        var_dump($breadcrumbs->isActive());
    @endphp
    

    弗斯特 var_dump 打印出 true ,秒 false . 这是一个错误还是我在行为上遗漏了什么? @注入

    1 回复  |  直到 6 年前
        1
  •  2
  •   lagbox    6 年前

    您需要从类名中删除起始斜杠。

    '\Something\Else' != 'Something\Else'

    没有斜线,它就找到了束缚。斜杠不匹配,因为名称不匹配,所以最后只会出现 new 正在创建新实例。如果要调用 新的 当类仍在命名空间中时使用字符串。

    结论:没有问题 @inject 因为它只是在呼唤 app($service) . 这就是应用程序容器查找绑定的方式。这些绑定是字符串,有时正好是FQCN,它们可以是任意随机字符串。