internal static Dictionary <string, List <Subscriber> > GetAll(string name, IModel relativeTo, ScopingRules scope) { IModel[] allModels = scope.FindAll(relativeTo); Dictionary <string, List <Subscriber> > subscribers = new Dictionary <string, List <Subscriber> >(); foreach (IModel modelNode in allModels) { foreach (MethodInfo method in modelNode.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)) { EventSubscribeAttribute attribute = (EventSubscribeAttribute)ReflectionUtilities.GetAttribute(method, typeof(EventSubscribeAttribute), false); if (attribute != null) { string eventName = attribute.ToString(); if (!eventName.Equals(name, StringComparison.InvariantCultureIgnoreCase)) { continue; } Subscriber subscriber = new Subscriber(eventName, modelNode, method); if (subscribers[eventName] == null) { subscribers[eventName] = new List <Subscriber>(); } subscribers[eventName].Add(subscriber); } } } return(subscribers); }
internal static Dictionary <string, List <Subscriber> > GetAll(List <IModel> allModels) { Dictionary <string, List <Subscriber> > subscribers = new Dictionary <string, List <Subscriber> >(); foreach (IModel modelNode in allModels) { foreach (MethodInfo method in modelNode.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)) { EventSubscribeAttribute attribute = (EventSubscribeAttribute)ReflectionUtilities.GetAttribute(method, typeof(EventSubscribeAttribute), false); if (attribute != null) { string eventName = attribute.ToString(); Subscriber subscriber = new Subscriber(eventName, modelNode, method); if (!subscribers.ContainsKey(eventName)) { subscribers.Add(eventName, new List <Subscriber>()); } subscribers[eventName].Add(subscriber); } } } return(subscribers); }
/// <summary>Find all event subscribers in the specified models.</summary> /// <param name="name">The name of the event to look for</param> /// <param name="relativeTo">The model to use in scoping lookup</param> /// <param name="scope">Scoping rules</param> /// <returns>The list of event subscribers</returns> internal static List <Subscriber> FindAll(string name, IModel relativeTo, ScopingRules scope) { List <Subscriber> subscribers = new List <Subscriber>(); foreach (IModel modelNode in scope.FindAll(relativeTo)) { foreach (MethodInfo method in modelNode.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)) { EventSubscribeAttribute subscriberAttribute = (EventSubscribeAttribute)ReflectionUtilities.GetAttribute(method, typeof(EventSubscribeAttribute), false); if (subscriberAttribute != null && subscriberAttribute.ToString() == name) { subscribers.Add(new Subscriber(subscriberAttribute.ToString(), modelNode, method)); } } } return(subscribers); }
/// <summary> /// Look through the specified model and return all event subscribers that match the event name. If /// eventName is null then all will be returned. /// </summary> /// <param name="eventName">The name of the event to look for</param> /// <param name="relativeTo">The model to search for event subscribers</param> /// <returns>The list of event subscribers found.</returns> private static List <EventSubscriber> FindEventSubscribers(string eventName, IModel relativeTo) { List <EventSubscriber> subscribers = new List <EventSubscriber>(); foreach (MethodInfo method in relativeTo.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)) { EventSubscribeAttribute subscriberAttribute = (EventSubscribeAttribute)ReflectionUtilities.GetAttribute(method, typeof(EventSubscribeAttribute), false); if (subscriberAttribute != null && (eventName == null || subscriberAttribute.ToString() == eventName)) { subscribers.Add(new EventSubscriber() { Name = subscriberAttribute.ToString(), MethodInfo = method, Model = relativeTo as Model }); } } return(subscribers); }
/// <summary>Find all event subscribers in the specified models.</summary> /// <param name="allModels">A list of all models in simulation.</param> /// <returns>The list of event subscribers</returns> internal static List <Subscriber> FindAll(List <IModel> allModels) { List <Subscriber> subscribers = new List <Subscriber>(); foreach (IModel modelNode in allModels) { foreach (MethodInfo method in modelNode.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)) { EventSubscribeAttribute subscriberAttribute = (EventSubscribeAttribute)ReflectionUtilities.GetAttribute(method, typeof(EventSubscribeAttribute), false); if (subscriberAttribute != null) { subscribers.Add(new Subscriber(subscriberAttribute.ToString(), modelNode, method)); } } } return(subscribers); }