using System; namespace TyphoonEvent { public class EventProxy : IEventProxy { protected EventProxy() { } public Type MessageType { get; protected set; } internal Delegate Handler { get; set; } public bool IsEnable { get; private set; } = true; internal EventProxy(Type messageType, Delegate handler) { MessageType = messageType; Handler = handler; } public void Invoke(T message) { if (!IsEnable) { return; } ((Action)Handler)?.Invoke(message); } public void Enable() { IsEnable = true; } public void Disable() { IsEnable = false; } public void Release() { EventKit.Unregister(this); Handler = null; } } public class EventProxy : EventProxy { public EventProxy(Action handler) { var type = typeof(T); MessageType = type; Handler = handler; } } }