using System; namespace DanieleMarotta.RiversongCodeShowcase { public class SignalBus : ISignalBus, IDisposable { private readonly ListMultiDictionary _subscribers = new(); public void Dispose() { _subscribers.Clear(); } public void Raise(T signal) { if (!_subscribers.TryGetValues(typeof(T), out var handlers)) return; foreach (var handler in handlers) ((Action)handler).Invoke(signal); } public void Subscribe(Action handler) { _subscribers.Add(typeof(T), handler); } public void Unsubscribe(Action handler) { _subscribers.Remove(typeof(T), handler); } } }