如何在C++中实现双向依赖注入?

Arm*_*ada 3 c++ dependency-injection

我正在创建一个MVC应用程序,我需要GUI来与控件通信(调用控件类中的方法),我需要控件与GUI通信(以显示数据,例如与模型中的更改相关的输出消息) ).因此,我需要GUI拥有控件的引用(或指针),反之亦然.我想使用依赖注入来建立这些关系.

任何类型的双向DI的问题是,在创建第一个对象之前,你不能将第一个对象传递给第二个对象,但是在创建时你不能将第二个对象传递给第一个对象.

如何实现这种2路DI?

ela*_*dan 6

依赖注入对于您描述的工作来说简直就是错误的工具.

任何拥有控件集合的"GUI对象"(例如对话框/窗口)都应该引用每个控件.在这种情况下,Window"知道"它的控件,但相反的方向不应该是真的,否则你将失去所述控件的一般性(甚至[在某种程度上]与运行时依赖性计算).

相反,控件应通过暴露事件/信号将消息传递给"GUI对象".如果控件和GUI在不同的线程上运行,控件的事件处理程序应该通知GUI调度程序(我不知道没有某种调度程序机制的GUI框架).如果你告诉我们你正在开发什么GUI框架,我可以扩展答案,包括一个简短的样本.

编辑:由于您正在开发QT,我建议您首先阅读QML中Signal和Handler事件系统.不幸的是,我对QT的调整不够自己给你一个样本,但也许另一个用户可以.