【问题标题】:Laravel service manifestLaravel 服务清单
【发布时间】:2014-03-10 19:18:20
【问题描述】:

据我了解,Laravel 除了 app/app.php 中的 provider 列表之外,还生成了一个 service manifest,它是一种代理。它负责为给定请求仅加载必要的提供程序。 例如如果我们在请求中不使用查看服务提供者(即使它已注册),Laravel 也不会加载它。

我说的对吗?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    有点是也不是。据我所知,Laravel 所做的是检查 config/app.php 中的 providers 键的内容。对于其中的每一个,它都会实例化服务提供者类。然后检查deferred 属性是否设置为true。

    如果不是,则以正常方式注册和启动该类。

    如果 deferred 设置为 true,则该类会被搁置,直到需要它为止。检查provides 数组的内容以查看在此类中注册了哪些 IoC 密钥,然后一旦需要注册其中一个,就会像其他任何服务一样注册和启动服务提供者。

    存储目录中的服务清单只是缓存此服务提供者检查的输出,因此它不必每次请求都执行此操作(即,它不必实例化和检查deferredprovides -无论如何,非延迟类仍然必须被实例化、注册和引导)。

    我不确定这个缓存在什么情况下“无效”。大概是当providers 配置键的实际内容发生变化时,但也许它也可以在不实例化它们的情况下检查 SP。

    至于非延迟服务提供者 - 如果不使用给定的 IoC 服务,那么它永远不会被实例化是正确的。但据我所知,这与服务清单不同。

    【讨论】:

    • alexrussell - 谢谢。我确实为你的回答投了票,只是因为你很亲密,而且你努力向我解释这一点。让我教你一些东西:) - 我刚刚读了一段代码。每个提供者都有一个注册的事件,如果它被调用,它就会监听。所以延迟只是意味着提供者正在监听事件。
    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 2022-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多