Esempio n. 1
0
        public void RegisterMessageHandlers(IEnumerable <Assembly> assemblies, IMessageHandlerConvention messageHandlerConvention)
        {
            Condition.Requires(assemblies, "assemblies").IsNotNull();
            Condition.Requires(messageHandlerConvention, "messageHandlerLocator").IsNotNull();

            foreach (Assembly assembly in assemblies)
            {
                InternalRegisterMessageHandlers(assembly, messageHandlerConvention);
            }

            SortRegisteredHandlers();
        }
        /// <summary>
        /// Start configuration of messages bus and scan for message handlers in the supplied assemblies.
        /// </summary>
        /// <param name="cfg"></param>
        /// <param name="assemblies"></param>
        /// <param name="messageHandlerConvention"></param>
        /// <returns></returns>
        public static MessageBusConfiguration MessageBus(this BaseConfiguration cfg, IEnumerable<Assembly> assemblies, IMessageHandlerConvention messageHandlerConvention = null)
        {
            if (cfg.ContainsKey(MessageBus_SettingsKey))
            throw new InvalidOperationException("You should not configure MessageBus twice.");
              cfg.Set(MessageBus_SettingsKey, true);

              Condition.Requires(assemblies, "assemblies").IsNotNull();

              // Also scan core message handlers
              assemblies = assemblies.Union(new Assembly[] { Assembly.GetExecutingAssembly() });

              MessageDispatcher dispatcher = MessageBusConfigurationExtensions.GetDispatcher(cfg);
              dispatcher.RegisterMessageHandlers(assemblies, messageHandlerConvention ?? new DefaultMessageHandlerConvention());

              return new MessageBusConfiguration(cfg);
        }
Esempio n. 3
0
        internal void InternalRegisterMessageHandlers(Assembly assembly, IMessageHandlerConvention messageHandlerConvention)
        {
            Condition.Requires(assembly, "assembly").IsNotNull();
            Condition.Requires(messageHandlerConvention, "messageHandlerLocator").IsNotNull();

            Logger.DebugFormat("Scanning assembly '{0}' for message handlers.", assembly);
            Logger.DebugFormat("Using message handler convention '{0}'.", messageHandlerConvention);

            // Go through all types and all their methods looking for message handlers
            foreach (Type handler in assembly.GetTypes())
            {
                foreach (MethodInfo method in handler.GetMethods())
                {
                    // Only test single-parameter methods for handlers
                    ParameterInfo[] parameters = method.GetParameters();
                    if (parameters.Length == 1)
                    {
                        Type baseType = parameters[0].ParameterType;

                        if (messageHandlerConvention.IsMessageHandler(method, baseType))
                        {
                            // Go through all other messages that inherit from the handlers message parameter
                            foreach (Type messageType in GetAllInheritedClasses(baseType))
                            {
                                Logger.DebugFormat("Register message handler '{0}' on '{1}' for message type '{2}'.", method.Name, method.DeclaringType, messageType);
                                MessageHandlerRegistration registration = new MessageHandlerRegistration(messageType, method);
                                MessageHandlers.Add(registration);
                                if (!MessageHandlerIndex.ContainsKey(messageType))
                                {
                                    MessageHandlerIndex.Add(messageType, new List <MessageHandlerRegistration>());
                                }
                                MessageHandlerIndex[messageType].Add(registration);
                                if (!ObjectContainer.HasComponent(method.DeclaringType))
                                {
                                    ObjectContainer.AddComponent(method.DeclaringType, method.DeclaringType);
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 4
0
 public void RegisterMessageHandlers(Assembly assembly, IMessageHandlerConvention messageHandlerConvention)
 {
     InternalRegisterMessageHandlers(assembly, messageHandlerConvention);
 }
Esempio n. 5
0
        /// <summary>
        /// Start configuration of messages bus and scan for message handlers in the supplied assemblies.
        /// </summary>
        /// <param name="cfg"></param>
        /// <param name="assemblies"></param>
        /// <param name="messageHandlerConvention"></param>
        /// <returns></returns>
        public static MessageBusConfiguration MessageBus(this BaseConfiguration cfg, IEnumerable <Assembly> assemblies, IMessageHandlerConvention messageHandlerConvention = null)
        {
            if (cfg.ContainsKey(MessageBus_SettingsKey))
            {
                throw new InvalidOperationException("You should not configure MessageBus twice.");
            }
            cfg.Set(MessageBus_SettingsKey, true);

            Condition.Requires(assemblies, "assemblies").IsNotNull();

            // Also scan core message handlers
            assemblies = assemblies.Union(new Assembly[] { Assembly.GetExecutingAssembly() });

            MessageDispatcher dispatcher = MessageBusConfigurationExtensions.GetDispatcher(cfg);

            dispatcher.RegisterMessageHandlers(assemblies, messageHandlerConvention ?? new DefaultMessageHandlerConvention());

            return(new MessageBusConfiguration(cfg));
        }