You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 12.4.6中接口别名意外表现为单例的问题咨询

TYPO3 接口别名服务意外单例问题分析

这不是系统问题,是你遗漏了DI容器的默认配置细节:

在TYPO3的依赖注入(DI)容器中,所有服务默认都是共享(单例)模式,不管实现类是否继承SingletonInterface。当你为接口配置别名时,这个别名对应的服务定义会沿用默认的shared: true配置,导致每次通过接口获取时都返回同一个实例。

而直接调用GeneralUtility::makeInstance(MyService::class)时,若容器中没有预先注册该类的共享实例,会直接创建新对象,因此不会出现状态保留的问题。

解决方法

在Services.yaml中显式将接口别名或实现类配置为非共享:

方式1:在接口别名配置中添加shared: false

My\Extension\Domain\Interface\MyServiceInterface:
  alias: My\Extension\Service\MyService
  public: true
  shared: false

方式2:在实现类配置中添加shared: false(若实现类有独立配置)

My\Extension\Service\MyService:
  shared: false

My\Extension\Domain\Interface\MyServiceInterface:
  alias: My\Extension\Service\MyService
  public: true

配置完成后,每次通过GeneralUtility::makeInstance(MyServiceInterface::class)获取服务时,都会创建新的实例,状态不会被保留。

内容的提问来源于stack exchange,提问作者tiimo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:33:15