请求中生成的单例, 挂载到容器的动态属性上.
持有”进程级容器”, 当绑定不存在时, 到”进程级容器” 上查找之....请求结束时进行必要清理, 防止内存泄露
解决方案的代码在 https://github.com/thirdgerb/container 创建了一个 composer 包 commune/container...'conversationProviders' => [
// 数据读写的组件, 用到了laravel DB 的redis 和 mysql
\Commune\Chatbot\Laravel...“请求级” 容器用静态属性注册服务, 动态属性持有单例
伪代码如下:
trait ContainerTrait
{
/**
* 请求级容器持有的单例
* @var array...就我发现, 最容易导致内存泄露的两种情况:
某个闭包在每次请求时生成一个闭包实例, 被每个容器持有
容器生成的某个服务是匿名类, 导致相互持有
简单来说, 就是定义闭包和匿名类时, 慎重考虑内存泄露的可能性就行