来自Symfony3

时间:2016-09-20 13:51:07

标签: logic symfony

在我的SF3项目中,我有两个服务相互依赖并导致循环引用问题:

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

因为,从类PageHandler我使用SentenceHandler为一个页面添加一个句子,而从SentenceHandler我使用PageHandler来获取Page的所有句子。

我注意到有3种方法可以解决这个问题:

  • 将我的addSentence()方法移动到SentenceHandler:但是我将从SentenceHandler修改一个页面,它不合逻辑。
  • 将getAllSentences()方法移至PageHandler:但我会从PageHandler获取句子,但这不合逻辑。
  • 将PageHandler和SentenceHandler中的getPage()方法重复,后者将独立:但它不是DRY

最好的方法是什么?你有其他想法吗?

1 个答案:

答案 0 :(得分:2)

在两项服务上使用setter injection

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

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

只要你不需要/使用构造函数中的服务(无论如何都有问题),就没有明显的区别。这意味着您可以在以后安全地将服务注入其他服务。