我正在使用C#/ WCF构建应用程序。将会有一个主要的表单项目本质上是连接所有其他项目(DLL)并且DLL不知道或允许相互引用的东西。然而,在一个DLL中,说病人的DLL,有一个按钮的形式,当该按钮被点击时,它需要打开一个不同的DLL的形式说Rx DLL,但两个DLL不能相互引用,他们只是通过主窗体连接。如何传递消息以使用WCF打开窗口
所以我想知道是否有可能完成这样的任务,如果是的话如何去做。如果可能,我宁愿不使用消息队列或发送消息。
感谢您的任何建议或帮助。
我正在使用C#/ WCF构建应用程序。将会有一个主要的表单项目本质上是连接所有其他项目(DLL)并且DLL不知道或允许相互引用的东西。然而,在一个DLL中,说病人的DLL,有一个按钮的形式,当该按钮被点击时,它需要打开一个不同的DLL的形式说Rx DLL,但两个DLL不能相互引用,他们只是通过主窗体连接。如何传递消息以使用WCF打开窗口
所以我想知道是否有可能完成这样的任务,如果是的话如何去做。如果可能,我宁愿不使用消息队列或发送消息。
感谢您的任何建议或帮助。
可以与事件链接形式:
给表单添加与按钮:
public event Action OpenOtherFormClick;
button_Click (object sender, EventArgs e) //Link to the button's Click event...
{
if (OpenOtherFormClick != null) { OpenOtherFormClick()}
}
这个添加到主项目:
instanceOfFormWithButton.OpenOtherFormClick +=() =>
{
//Open other form, e.g.
new OtherForm().Show();
//or
new OtherForm().ShowDialog();
//or, with factory class:
FormFactory.ShowOtherForm();
};
或者:
instanceOfFormWithButton.OpenOtherFormClick += FormFactory.ShowOtherForm;
工厂具有的优点是,您可以将某些表单限制为单个实例,例如仅显示一次详细信息表单,并且只有在已打开的情况下才会关注它。
我不知道我是否真的了解你的问题,但你可以看看MEF。
但是,您可以使用WCF进行进程间通信(net.pipe),这不是一个好习惯。
所以你说你的DLL没有相互引用,但可以有对方的服务引用,并仍然生活在客户端机器上运行的同一个应用程序?为什么?与这样的体系结构玩得开心...... –
@Ladislav这实际上与C#的以组件为中心的模式相当常见。在管理大型项目时,[observer pattern](http://msdn.microsoft.com/zh-cn/library/ee817669.aspx)特别有用,其中某些组件在不同的配置中使用,并帮助将UI与程序逻辑分开。 – Tamschi
@Tamschi:是Observer模式 - 但您不会将其作为远程调用来实现。 –