Logic 使用Symfony3中的参考组件进行维修
在我的SF3项目中,我有两个相互依赖的服务,它们会导致循环引用问题:Logic 使用Symfony3中的参考组件进行维修,logic,symfony,Logic,Symfony,在我的SF3项目中,我有两个相互依赖的服务,它们会导致循环引用问题: page_handler : arguments : ["@sentence_handler"] sentence_handler : arguments : ["@page_handler"] 因为,从类PageHandler我使用SentenceHandler向页面添加一个句子,从SentenceHandler我使用PageHandler从页面获取所有句子 我注意到有3个选项可以解决此问题: 将我的a
page_handler :
arguments : ["@sentence_handler"]
sentence_handler :
arguments : ["@page_handler"]
因为,从类PageHandler我使用SentenceHandler向页面添加一个句子,从SentenceHandler我使用PageHandler从页面获取所有句子
我注意到有3个选项可以解决此问题:
- 将我的addSession()方法移动到SentenceHandler:但我将从SentenceHandler修改一个页面,它不符合逻辑
- 将getAllSequences()方法移到PageHandler:但我将从PageHandler获取句子,这不符合逻辑
- 将getPage()方法从PageHandler复制到SentenceHandler,这将变得独立:但它不是干的
page_handler:
class: PageHandler
calls:
- ["setSentenceHandler", ["@sentence_handler"]]
sentence_handler:
class: SentenceHandler
calls:
- ["setPageHandler", ["@page_handler"]]
只要您不需要/不使用constructor中的服务(这是有问题的),就不会有明显的区别。这意味着您以后可以安全地将服务注入到其他服务中。最糟糕的方法是将容器注入到服务中,并在需要时获取相关服务。通常避免这样做getPage功能是否可以移动到它自己的服务中并注入到其他处理程序中?那会解决你的干燥问题。谢谢你,我不知道注射的不同类型!小心点。这个技巧是有效的,但这种交叉依赖性会使代码难以维护。