Ejemplo n.º 1
0
        public void RegisterConsumers(string queueName,
                                      List <string> includedEvents,
                                      List <string> excludeEvents,
                                      List <string> excludeEventHandlers,
                                      Assembly assembly)
        {
            var scanner = assembly.GetTypes()
                          .Where(t => t.IsClosedTypeOf(typeof(IEventHandler <>)))
                          .SelectMany(t => t.GetInterfaces().Where(i => i.GetGenericArguments().Count() > 0).Select(i => new { h = new EventHandlerType(t), e = new EventType(i.GenericTypeArguments[0]) }))
                          .Where(t =>
            {
                var include = true;
                if (include && includedEvents.Count > 0)
                {
                    include = includedEvents.Contains(t.e.Name);
                }

                if (include && excludeEvents.Count > 0)
                {
                    include = !excludeEvents.Contains(t.e.Name);
                }

                if (include && excludeEventHandlers.Count > 0)
                {
                    include = !excludeEventHandlers.Contains(t.h.Name);
                }

                return(include);
            })
                          .AsEnumerable().ToList();

            foreach (var types in scanner)
            {
                SubscriptionsManager.AddOrUpdateConsumer(queueName, types.e, types.h);
            }
        }