【发布时间】:2020-05-25 07:46:40
【问题描述】:
我正在构建一个类似于 i3wm/bspwm 的开源平铺窗口管理器应用程序。 Would hopefully look something like this, but for Windows。屏幕顶部有一个小栏显示您的“工作区”,您可以单击工作区以显示其窗口。
目前,我的解决方案中有 3 个项目:Bar、Window Manager 和 Common。 Window Manager 项目保存工作区等的状态,并具有 Bar 应该触发的命令。 Common 仅保留两个项目之间共享的基础架构,例如 CommandBus,以促进项目之间的通信。
Bar 项目由以下内容组成:
public LaunchBar()
{
// Launch WPF app.
InitializeComponent();
// Bind current workspaces to template.
workspaces.ItemsSource = workspaceRepository.GetWorkspaces(); // workspaceRepository exists in Window Manager project
}
private void OnWorkspaceClick()
{
commandBus.Invoke(new ChangeWorkspaceCommand()); // ChangeWorkspaceCommand exists in Window Manager project
}
这个想法是LaunchBar 在检测到新监视器时在窗口管理器项目中以编程方式调用。但是,这会导致两个项目之间出现循环引用。
如何构建这个项目以避免循环引用?天哪,卡在这里了。
【问题讨论】:
标签: c# architecture domain-driven-design cqrs