存储一个EventHandler列表以取消订阅

我有一个带有方法的类, Register使用标准的aClass.SomeEvent += the_handler来订阅它包含的类上的许多事件。 此类还有一个Unregister方法,使用-=取消订阅这些事件。 这很好但我们发现如果我们添加一个新事件来订阅它,很容易忘记在取消Unregister包含取消订阅。 这种维护事件订阅的手动方法被certificate是脆弱的。

有没有办法维护一个可以迭代和动态取消订阅的订阅列表? (并且在Unregister Register后调用Register时可能会迭代并重新订阅)。

一些细节:该类引用了其他3个类(当前,但不限于3),这些类上的各种事件都是EventHandlerEventHandler

如何从EventHandler.GetInvocationList()获取调用列表,然后通过并手动删除/取消注册它们? 请注意,您只能从具有该EventHandler的类访问GetInvationList()方法,因此您可能需要公开方法UnregisterAll()以确保它删除事件调用列表中的所有delagates

您还可以确保您的类inheritanceIDisposable并使用using(){ }它将调用Dispose来清理所有订阅者

经过彻底的审视,我发现了这个答案:

C#动态事件订阅

这就是我想要的(差不多)。 我不喜欢使用字符串来命名事件,因此我不再进一步追求这种设计。 虽然这不是我想要的设计,但答案显示了一种非常有用的方法来实现所需的行为,因此我将其标记为已被接受。