可以在这里 “注册” 各种服务的工厂方法, 再使用容器统一地获取....简单来说, 容器通过反射机制可获取目标方法的依赖 ( laravel 用反射来获取 typehint 类型约束, 而 Swoft项目似乎与spring 相似, 是从注释上获取的)....简单来说, 就是在一个 worker 进程中, 存在两种级别的容器:
进程级容器: 一个进程只有一个实例
请求级容器: 每一个请求拥有一个独立的实例
“进程级” 与 “请求级” 容器分开注册服务
CommuneChatbot...中, 类似 laravel 的 serviceProvider 分两处注册.
// 在worker中注册的服务, 多个请求共享
'processProviders' => [
// 基础组件加载...但 PHP 其实有个内部机制, 反射调用一次就会缓存起来, 下次调用的开销是之前的几十分之一.
所以用swoole, 还可能提升了整体依赖注入的性能.