2016-09-20 108 views
3

参考装配在我的SF3的项目,我有两个服务谁依赖对方,导致循环引用问题:服务与Symfony3

page_handler : 
    arguments : ["@sentence_handler"] 
sentence_handler : 
    arguments : ["@page_handler"] 

因为,从类页面处理器我用SentenceHandler一个句子添加到页面,并从SentenceHandler我使用PageHandler从页面获取所有句子。

我注意到三个选项来解决这个问题:

  • 动我addSentence()方法来SentenceHandler:但我会从SentenceHandler修改页面,这是不符合逻辑的。
  • 将getAllSentences()方法移至PageHandler:但我会从PageHandler中获取句子,这不合逻辑。
  • 重复GETPAGE从页面处理器到SentenceHandler这将成为独立的()方法:但它不会干

什么是最好的方法是什么?你有另外一个想法吗?

+0

最糟糕的方法是在两个服务中注入容器,并在需要时获取相关服务。通常避免做[this](http://symfony.com/doc/current/components/dependency_injection.html#avoiding-your-code-becoming-dependent-on-the-container) – Matteo

+1

getPage功能可以移入它是自己的服务,并注入其他处理程序?这会照顾你干的问题。 – Cerad

回答

2

两个服务的使用setter injection:在构造器(这是有问题反正)

page_handler: 
    class: PageHandler 
    calls: 
     - ["setSentenceHandler", ["@sentence_handler"]] 

sentence_handler: 
    class: SentenceHandler 
    calls: 
     - ["setPageHandler", ["@page_handler"]] 

只要你并不需要/使用的服务,会有不noticable差异。这意味着您可以在以后安全地将服务注入其他服务。

+0

谢谢,我不知道注射的不同类型! – johnnyevolunium

+1

只要小心。这个技巧很有效,但是这些交叉依赖可以让你的代码难以维护。 – Cerad