private void _AddSubscriber(string type, object go, MethodInfo methodInfo) { if (!_subscribers.ContainsKey(type)) { _subscribers.Add(type, new List <SubscriberAction>()); } SubscriberAction method = (SubscriberAction)Delegate.CreateDelegate(typeof(SubscriberAction), go, methodInfo.Name); _subscribers[type].Add(method); }
public void Start() { var methods = obj.GetType().GetMethods().Where( prop => Attribute.IsDefined(prop, typeof(Subscribe))); foreach (System.Reflection.MethodInfo m in methods) { SubscriberAction method = (SubscriberAction)Delegate.CreateDelegate(typeof(SubscriberAction), obj, m.Name); Subscribe attr = (Subscribe)m.GetCustomAttributes(typeof(Subscribe), true)[0]; MessageBus.MessageSubscriber subs = new MessageBus.MessageSubscriber(); subs.action = method; subs.MessageTypes = attr.subscribed_types; MessageBus.MessageBus.Instance.AddSubscriber(subs); } }
private async void InvokeActionOrRemove(WeakReference <IStoreSubscriber> subscriberReference, SubscriberAction action) { if (subscriberReference.TryGetTarget(out IStoreSubscriber subscriber)) { await action(subscriber); } else { subscribers.TryRemove(subscriberReference, out _); } }
public SubscriberEventArgs(SubscriberAction action, EventHandler <EventArgs> e) { Action = action; SubscribingEvent = e; }