发布者公开了多个订阅者可以连接的事件
订阅方- > publisher.OnSomeEvent + = subscriber.CallMe()
稍后订阅者根据一些动态参数进行订阅
publisher.Subscribe(arguments)
publisher.Unsubscribe(参数)
根据订阅者传递的参数,我希望发布者更新订阅者以获取他们订阅的内容。
在内部,我可以维护一个订阅者到参数的映射,但我的问题是,当事件注册和订阅断开时,我找不到传递被调用者句柄的好方法(所以我可以维护一个map subscriber->参数)在拨打订阅/取消订阅电话时。
为了保持我的API简单,我不希望callee传递“this”,同时由于内联问题,StackFrame和诊断API在发布模式下不起作用,我想不出更好的设计。
如果您能建议更好的方法来实现这一点,请感谢您的帮助吗?
答案 0 :(得分:0)
这不是最优雅的解决方案,但您可以让发布商通过接口与订阅者打交道,这会使发布者无需了解任何特定的订阅者实现。
例如
interface ISubscriber
{
object Arguments{get;}
}
哪个会使客户端API签名:
void Subscribe(ISubscriber subscriber)
当然,如果您不希望您的订阅者类型具有Arguments属性,您可能希望以单独的类型实现该接口。
答案 1 :(得分:0)
如果你想过滤这些出版物,我会说放弃这个事件,而是使用像
这样的东西publisher.Subscribe(arguments, subscriber.CallMe)
要取消订阅,您必须拥有一些标识符,可以是GUID,字符串,整数,this
(不确定为什么要避免它)......