所谓容器, 相当于一个全局的工厂. 可以在这里 “注册” 各种服务的工厂方法, 再使用容器统一地获取....简单来说, 容器通过反射机制可获取目标方法的依赖 ( laravel 用反射来获取 typehint 类型约束, 而 Swoft项目似乎与spring 相似, 是从注释上获取的)....方案: 每个请求到来时, 实例化一个新容器, 重新注册所有服务
问题:
CommuneChatbot 遇到的请求隔离问题
多轮对话机器人框架 CommuneChatbot 在启动时需要加载大量多轮对话的逻辑...系统搭建者才要考虑
“请求级”容器持有”进程级”容器
CommuneChatbot 使用 trait 改造了 laravel 的 illuminate/container, 以此为基础实现了 递归容器...父容器也是递归容器的话, 就会递归式查找.
这样, 进程级共享的单例, 就可以注册到 “进程级容器” . 而请求相互隔离的单例, 就注册到 “请求级容器”.