コード例 #1
0
        /// <summary>
        ///     Get all the event listeners for the given event type.
        /// </summary>
        /// <param name="services">Current service provider.</param>
        /// <param name="modules">Active modules for the current guild..</param>
        /// <returns>The event listeners.</returns>
        private static IEnumerable <EventHandler> GetHandlers <TEvent>(
            IServiceProvider services,
            IReadOnlyCollection <string> modules = null)
            where TEvent : IEvent
        {
            var checkEnabledModule = modules != null;

            foreach (var handler in services.GetServices <IEventListener>())
            {
                var events = RegisteredEventListener.FromType(handler.GetType());

                foreach (var eventHandler in events)
                {
                    if (eventHandler.EventType != typeof(TEvent) ||
                        checkEnabledModule &&
                        eventHandler.Module != null &&
                        !modules.Contains(eventHandler.Module))
                    {
                        continue;
                    }

                    yield return(new EventHandler(handler, eventHandler));
                }
            }
        }