using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Tango.Core.DI { /// /// Represents the Tango messenger service. /// public class TangoMessenger { private class MessageHandler { public Type Type { get; set; } public Action Handler { get; set; } public MessageHandler(Type type, Action handler) { Type = type; Handler = handler; } } private List _messageHandlers; private static TangoMessenger _default; /// /// Gets the default messenger instance. /// public static TangoMessenger Default { get { if (_default == null) { _default = new TangoMessenger(); } return _default; } } /// /// Initializes a new instance of the class. /// public TangoMessenger() { _messageHandlers = new List(); } /// /// Registers the specified message handler. /// /// /// The handler. public void Register(Action handler) { _messageHandlers.Add(new MessageHandler(typeof(T), (x) => handler((T)x))); } /// /// Sends the specified message. /// /// /// The message. public void Send(T message) { foreach (var handler in _messageHandlers.Where(x => x.Type == typeof(T))) { handler.Handler(message); } } } }