public static void AddSignalHandler <TSignal>(this IGalleySignalHandler element, Action <TSignal> action = null) where TSignal : GalleyBaseSignal
 => _signalsMapping.TryGetValue(typeof(TSignal), out Dictionary <IGalleySignalHandler, object> listeners)
 .Then(() => listeners[element] = action)
 .Else(() => _signalsMapping.Add(typeof(TSignal), new Dictionary <IGalleySignalHandler, object>
 {
     [element] = action
 }));
 public static void ClearSignalHandlers(this IGalleySignalHandler element)
 => _signalsMapping.Values.Each(listeners => listeners.Remove(element));
 public static void RemoveSignalHandler <TSignal>(this IGalleySignalHandler element) where TSignal : GalleyBaseSignal
 => _signalsMapping.TryGetValue(typeof(TSignal), out Dictionary <IGalleySignalHandler, object> listeners)
 .Then(() => listeners.Remove(element));