已断开连接的事件注册和订阅

时间:2010-11-09 02:33:31

标签: c# .net events

发布者公开了多个订阅者可以连接的事件

订阅方

- > publisher.OnSomeEvent + = subscriber.CallMe()

稍后订阅者根据一些动态参数进行订阅

publisher.Subscribe(arguments)

publisher.Unsubscribe(参数)

根据订阅者传递的参数,我希望发布者更新订阅者以获取他们订阅的内容。

在内部,我可以维护一个订阅者到参数的映射,但我的问题是,当事件注册和订阅断开时,我找不到传递被调用者句柄的好方法(所以我可以维护一个map subscriber->参数)在拨打订阅/取消订阅电话时。

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

如果您能建议更好的方法来实现这一点,请感谢您的帮助吗?

2 个答案:

答案 0 :(得分:0)

这不是最优雅的解决方案,但您可以让发布商通过接口与订阅者打交道,这会使发布者无需了解任何特定的订阅者实现。

例如

interface ISubscriber
{
object Arguments{get;}
}

哪个会使客户端API签名:

void Subscribe(ISubscriber subscriber)

当然,如果您不希望您的订阅者类型具有Arguments属性,您可能希望以单独的类型实现该接口。

答案 1 :(得分:0)

如果你想过滤这些出版物,我会说放弃这个事件,而是使用像

这样的东西
publisher.Subscribe(arguments, subscriber.CallMe)

要取消订阅,您必须拥有一些标识符,可以是GUID,字符串,整数,this(不确定为什么要避免它)......