Esempio n. 1
0
        private static void RegisterEventListeners(IEnumerable <Type> types)
        {
            var contributor = new EventListenerContributor();

            foreach (var type in types)
            {
                var eventListenerAttributes = type.GetCustomAttributes(typeof(EventListenerAttribute), false);
                if (eventListenerAttributes.Length == 1)
                {
                    var attribute = (EventListenerAttribute)eventListenerAttributes[0];
                    var config    = new EventListenerConfig(type)
                    {
                        ReplaceExisting = attribute.ReplaceExisting,
                        Ignore          = attribute.Ignore,
                        SkipEvent       = attribute.SkipEvent,
                        Singleton       = attribute.Singleton,
                        Include         = attribute.Include,
                        Exclude         = attribute.Exclude
                    };

                    contributor.Add(config);
                }
            }

            if (EventListenerComponentRegistrationHook != null)
            {
                EventListenerComponentRegistrationHook(contributor);
            }

            var addEventListenerAttributes    = new List <EventListenerAssemblyAttribute>();
            var ignoreEventListenerAttributes = new List <EventListenerAssemblyAttribute>();

            foreach (var assembly in registeredAssemblies)
            {
                addEventListenerAttributes.AddRange(
                    (AddEventListenerAttribute[])assembly.GetCustomAttributes(typeof(AddEventListenerAttribute), false));
                ignoreEventListenerAttributes.AddRange((IgnoreEventListenerAttribute[])assembly.GetCustomAttributes(typeof(IgnoreEventListenerAttribute), false));
            }

            ProcessEventListenerAssemblyAttributes(contributor, ignoreEventListenerAttributes);
            ProcessEventListenerAssemblyAttributes(contributor, addEventListenerAttributes);

            if (EventListenerFacilityConfigurationHook != null)
            {
                EventListenerFacilityConfigurationHook(contributor);
            }

            AddContributor(contributor);
        }
Esempio n. 2
0
 private static void ConfigureEventListener(EventListenerAssemblyAttribute attribute, EventListenerConfig config)
 {
     if (attribute is IgnoreEventListenerAttribute)
     {
         config.Ignore = true;
     }
     else
     {
         config.Ignore = false;
         var addAttribute = (AddEventListenerAttribute)attribute;
         config.Exclude   = addAttribute.Exclude;
         config.Include   = addAttribute.Include;
         config.SkipEvent = addAttribute.ExcludeEvent;
         if (addAttribute.IncludeEvent != null)
         {
             Type[] eventtypes = EventListenerContributor.GetEventTypes(config.ListenerType);
             config.SkipEvent = Array.FindAll(eventtypes, type => Array.IndexOf(addAttribute.IncludeEvent, type) < 0);
         }
         config.Singleton       = addAttribute.Singleton;
         config.ReplaceExisting = addAttribute.ReplaceExisting;
     }
 }
Esempio n. 3
0
 private static void ProcessEventListenerAssemblyAttributes(EventListenerContributor contributor, IEnumerable <EventListenerAssemblyAttribute> attributes)
 {
     foreach (var attribute in attributes)
     {
         if (attribute.Assembly != null)
         {
             foreach (var type in GetExportedTypesFromAssembly(attribute.Assembly))
             {
                 if (EventListenerContributor.GetEventTypes(type).Length > 0)
                 {
                     var config = contributor.Get(type) ?? contributor.Add(new EventListenerConfig(type));
                     ConfigureEventListener(attribute, config);
                 }
             }
         }
         if (attribute.Type != null)
         {
             var config = contributor.Get(attribute.Type) ?? contributor.Add(new EventListenerConfig(attribute.Type));
             ConfigureEventListener(attribute, config);
         }
     }
 }