只是......做一些练习。
结构:
客户端WPF应用程序和服务器WPF应用程序,它们都是自托管WCF服务。
客户端WPF包含一个View,其中包含ListBox
我想做什么:
服务器WPF将为客户端的WCF创建频道并不断发送消息。
客户的WCF将收到订阅它的任何类的消息和电影广播。 (或许我会说观察它的课程。)
在这种情况下,客户的视图应该收到消息并放入列表框。
问题:
所以问题是如何让View观察WCF?或者通过WCF获得通知?
客户端的WCF是使用ServiceHost创建的myHost = new ServiceHost(typeof(MyClient));
如何让WCF引用我的客户视图并进行通知?
Throught:
以某种方式硬编码客户端的WCF以在内部使用View引用(这......没有意义)
观察者模式?创建一个静态Subject类,实现Client的WCF接口。 在Client的will路由器中,所有方法都调用Subject类。 View还将实现客户端的WCF接口并附加到Subject类。最后,Subject类将路由器调用所有视图....
这样的事情:
public class ClientServiceObserver : IClient
{
static List<IClient> _observers = new List<IClient>();
public static void Attach(IClient client)
{
_observers.Add(client);
}
public static void Detach(IClient client)
{
_observers.Remove(client);
}
public void SendCallbackMessage(string message)
{
foreach (IClient client in _observers)
{
client.SendCallbackMessage(message);
}
}
}
3.类似于选项2的所有内容,但不是路由器所有呼叫到处都是,不妨让WCF只通知Subject类有更新,然后View将获取通知并创建通道到服务器以获取它自己的数据。 ...
以上所有选项都听起来不太好......而选项2我甚至不知道这是否是观察者模式....
我想知道最佳做法是什么?
答案 0 :(得分:0)
请查看EventAggregator模式以实现您的目标。
中提供了EvenAggregator实现请参阅使用EventAggregator here的示例
你不需要使用这里提到的完整框架,你可以拔出EventAggregator类并使用它。