2010-11-09 77 views
0

出版商暴露到其中多个用户可以连接到断开事件注册和订阅

订户侧的事件 - 在用户订阅基于> publisher.OnSomeEvent + = subscriber.CallMe()

后来一些动态参数

publisher.Subscribe(参数)

publisher.Unsubscribe(参数)

根据由用户传递什么样的参数,我想出版商来更新他们订阅内容的用户。

在内部我可以维护一个订阅地图的参数,但我的问题是,因为事件注册和订阅被断开,我无法找到一个好的方式来传递被调用句柄(所以我可以维护一个地图subscriber-> arguments )呼叫订阅/取消订阅呼叫时。

为了保持我的API简单,我不希望被调用者传递“this”,同样由于内联问题,StackFrame和诊断API不能在发布模式下工作,所以我想不出更好的设计。

感谢您的帮助,如果你能提出一个更好的方式来实现这一目标?

回答

0

这是不是最优雅的解决方案,但你可以通过它将从无需了解任何具体的用户代码中分离出版商的界面让发布商应对用户。

例如

interface ISubscriber 
{ 
object Arguments{get;} 
} 

这将使客户端API签名:

void Subscribe(ISubscriber subscriber) 

当然,你可能要实现在一个单独的类型的接口,如果你不想让你的用户类型有一个Arguments属性。

+0

谢谢,但我的想法是让API干净,我看不出太大的区别,如果我通过从你所提到的订阅(本)。我在想解决这一问题的方法是通过给函子来订阅的客户 – 2010-11-09 02:59:15

+0

在预订的客户端也许我可以做这样的事情publisher.GetNewInstance - 出版商然后给出了一个仿函数并在内部对发布商方面,我可以保持一个静态缓存并连接到返回的实例。希望我有道理 – 2010-11-09 03:00:35

0

如果你要过滤的刊物,我说沟里的事件,而是使用类似

publisher.Subscribe(arguments, subscriber.CallMe) 

要退订你必须有标识的一些Dort的,可能是一个GUID,字符串,整数,this(不知道为什么你要避免它)...