public void On <E>(Action <E> callback)
        {
            if (EventIdentifiers == null)
            {
                EventIdentifiers = new List <Guid>();
            }

            var id = EventHub.On(callback);

            EventIdentifiers.Add(id);
        }
        protected void DetachEvents()
        {
            if (IsDestroying || IsDisabling)
            {
                return;
            }

            IsDestroying = true;

            if (EventIdentifiers != null)
            {
                foreach (var id in EventIdentifiers)
                {
                    EventHub.Off(id);
                }

                EventIdentifiers.Clear();
            }

            // Detach observed components
            if (ObservedComponents != null)
            {
                foreach (var component in ObservedComponents)
                {
                    component.Off(this);
                }

                ObservedComponents.Clear();
            }

            // Detach subscribers
            if (Subscribers != null)
            {
                foreach (var subscriber in Subscribers)
                {
                    subscriber.Key.Disconnect(this);
                    subscriber.Value.Clear();
                }

                Subscribers.Clear();
            }

            //foreach (var e in GetType().GetEvents()) {
            //    e.ClearEvents(this);
            //}
        }
 public void Publish <E>(E e)
 {
     Send(e);
     EventHub.Publish(e);
 }