2013-09-27 63 views
0

我确实有以下场景: 我有一个shell和两个模块(moduleA.dll,moduleB.dll通过bootstrapper包含),我使用PRISM4创建的。复合WPF GUI共享SerialPort(PRISM/MEF)

ModuleA读取数据库,并从该信息中打开串口。该模块还提供通过串行连接发送命令。

ModuleB也可以发送数据到同一个串行连接,模块A已经打开。此外,moduleB应该包含绘制来自串行端口的数据的图。

如: ModuleA发送 “设定1,设定2” ModuleB发出 “开始” - > ModuleB接收数据( - >剧情数据) ModuleB发出 “停止”

所以我理解他们应该以某种方式共享这个串口实例。任何想法如何设置这种情况?

在此先感谢。

回答

1

你最初的模块/类设置看起来不对。模块的概念主要用于可插拔的可选功能,而不是你在这里描述的内容:看起来ModuleB不能没有ModuleA存在(因为它需要端口A有,并且可能需要首先发送设置等)只有ModuleA没有ModuleB的-versa也没有意义(只发送设置但没有数据通信)。

如果您的设置非常简单,只需使用单个模块进行所有串口通信。那么你可以做什么,将数据库抽象成一个单独的模块,最后也是绘图。然后,如果您切换到另一个数据库,则只需提供一个新模块。同样的情节。 (注意,这仅仅是你可以做的一个例子,绝不意味着这是针对你的特定问题的解决方案)。对于'抽象'部分,您使用MEF/Unity的依赖注入:在一个公共项目中创建接口,将接口的实现导出到模块中,并将其导入另一个模块。

+0

+1首先,感谢您的快速和有益的回应。我现在看到,我的模块的构建不是最好的选择。 – user2799180

+0

stijn我还有一个问题。你能举个例子吗?我是棱镜新手,如果moduleA中的数据立即更新,我找不到更新moduleB中数据的示例。 – user2799180

+0

你应该更具体,并且可能会为此创建一个单独的问题。然而,这里的原则是布置在这里:http://stackoverflow.com/questions/18530203/how-to-create-an-instance-of-a-class-of-another-module-without-adding-reference/18530815# 18530815 – stijn