存储一个EventHandler列表以取消订阅
我有一个带有方法的类, Register
使用标准的aClass.SomeEvent += the_handler
来订阅它包含的类上的许多事件。 此类还有一个Unregister
方法,使用-=
取消订阅这些事件。 这很好但我们发现如果我们添加一个新事件来订阅它,很容易忘记在取消Unregister
包含取消订阅。 这种维护事件订阅的手动方法被certificate是脆弱的。
有没有办法维护一个可以迭代和动态取消订阅的订阅列表? (并且在Unregister
Register
后调用Register
时可能会迭代并重新订阅)。
一些细节:该类引用了其他3个类(当前,但不限于3),这些类上的各种事件都是EventHandler
或EventHandler
。
如何从EventHandler.GetInvocationList()
获取调用列表,然后通过并手动删除/取消注册它们? 请注意,您只能从具有该EventHandler的类访问GetInvationList()方法,因此您可能需要公开方法UnregisterAll()以确保它删除事件调用列表中的所有delagates
您还可以确保您的类inheritanceIDisposable
并使用using(){ }
它将调用Dispose来清理所有订阅者
经过彻底的审视,我发现了这个答案:
C#动态事件订阅
这就是我想要的(差不多)。 我不喜欢使用字符串来命名事件,因此我不再进一步追求这种设计。 虽然这不是我想要的设计,但答案显示了一种非常有用的方法来实现所需的行为,因此我将其标记为已被接受。