我正在创建一个MVC应用程序,我需要GUI与控件交谈(调用控件类中的方法),我需要控件与GUI通信(显示数据,如与变化相关的输出消息)在模型中)。因此,我需要GUI拥有控件的引用(或指针),反之亦然。我想使用依赖注入来建立这些关系。
任何一种双向DI的问题在于,在创建第一个对象之前,你不能将第一个对象传递给第二个对象,但是在创建时你不能将第二个对象传递给第一个对象。 / p>
如何实施这种双向DI?
答案 0 :(得分:6)
依赖注入只是您所描述的工作的错误工具。
拥有控件集合的任何“GUI对象”(例如对话框/窗口)都应该引用每个控件。在这种情况下,Window“知道”它的控件,但相反的方向不应该是真的,否则你将失去所述控件的一般性(甚至[在某种程度上]与运行时依赖性计算)。
相反,控件应通过暴露事件/信号将消息传递给“GUI对象”。如果控件和GUI在不同的线程上运行,控件的事件处理程序应该通知GUI调度程序(我不知道没有某种调度程序机制的GUI框架)。如果你告诉我们你正在开发什么样的GUI框架,我可以扩展答案,包括一个简短的样本。
编辑:由于您正在开发QT,我建议您先阅读Signal and Handler event system in QML。不幸的是,我对QT的调整不够自己给你一个样本,但也许是其他用户可以。