Laravel中除了在服务提供者中还能绑定实例到容器吗?
文档上只说几乎都是在服务提供者中绑定实例,但没说其它情况
假如我有一个类,功能也不多,不需要打包成一个服务提供者,也并不是每次请求都需要加载的,在特定的业务中才需要,但可能会在一个请求周期内多次用到这个类的实例,为了避免多次New 除了使用单例之外,难道不能加入容器里吗?
文档上只说几乎都是在服务提供者中绑定实例,但没说其它情况
假如我有一个类,功能也不多,不需要打包成一个服务提供者,也并不是每次请求都需要加载的,在特定的业务中才需要,但可能会在一个请求周期内多次用到这个类的实例,为了避免多次New 除了使用单例之外,难道不能加入容器里吗?
5 Comments
可以啊 一个服务提供者可以绑定多个实例到容器的啊 不是一对一的 你随便选个服务提供者绑定好了 通常是 AppServiceProvider
注册到config/app.php 里的服务提供者,在应用启动时都会绑定所有实例并加载。这样类多了启动一个应用内存消耗就非常多了,貌似可以实现延迟加载,但这样的类多了,全部写到AppServiceProvider里貌似也不太好看。 那能不能在进入到控制器这个层级,访问容器实例,然后做绑定?这样就满足按需加载。
试试延迟绑定功能 用到的时候才会实例化
对,两个方法,如果不想都写在app 服务提供者 中可以这样:
// 要使用时:
但我这做法看样子明显很“不优雅”
我看挺好啊 ?