2011-03-02 29 views
0

我正在使用C#/ WCF构建应用程序。将会有一个主要的表单项目本质上是连接所有其他项目(DLL)并且DLL不知道或允许相互引用的东西。然而,在一个DLL中,说病人的DLL,有一个按钮的形式,当该按钮被点击时,它需要打开一个不同的DLL的形式说Rx DLL,但两个DLL不能相互引用,他们只是通过主窗体连接。如何传递消息以使用WCF打开窗口

所以我想知道是否有可能完成这样的任务,如果是的话如何去做。如果可能,我宁愿不使用消息队列或发送消息。

感谢您的任何建议或帮助。

+0

所以你说你的DLL没有相互引用,但可以有对方的服务引用,并仍然生活在客户端机器上运行的同一个应用程序?为什么?与这样的体系结构玩得开心...... –

+0

@Ladislav这实际上与C#的以组件为中心的模式相当常见。在管理大型项目时,[observer pattern](http://msdn.microsoft.com/zh-cn/library/ee817669.aspx)特别有用,其中某些组件在不同的配置中使用,并帮助将UI与程序逻辑分开。 – Tamschi

+0

@Tamschi:是Observer模式 - 但您不会将其作为远程调用来实现。 –

回答

0

可以与事件链接形式:

给表单添加与按钮:

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; 

工厂具有的优点是,您可以将某些表单限制为单个实例,例如仅显示一次详细信息表单,并且只有在已打开的情况下才会关注它。

0

我不知道我是否真的了解你的问题,但你可以看看MEF
但是,您可以使用WCF进行进程间通信(net.pipe),这不是一个好习惯。

相关问题