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