CQRSMicro.Core.MessageBusExtensions.Register C# (CSharp) Method

Register() public static method

public static Register ( this messageBus, IDependencyResolver dependencyResolver ) : void
messageBus this
dependencyResolver IDependencyResolver
return void
        public static void Register(this IMessageBus messageBus, IDependencyResolver dependencyResolver, params Assembly[] assembliesToScan)
        {
            var subscribeMethod = messageBus.GetType().GetMethod("Subscribe");
            var types = assembliesToScan.SelectMany(assembly => assembly.GetTypes().Where(x => typeof(IMessageHandler).IsAssignableFrom(x) && !x.IsInterface));
            foreach (var type in types)
            {
                var instanceOfType = dependencyResolver.Get(type);
                var whenMethods = type.GetMethods().Where(x => x.Name == "When");
                foreach (var whenMethod in whenMethods)
                {
                    var messageType = whenMethod.GetParameters().First();
                    var genericSubscribeMethod = subscribeMethod.MakeGenericMethod(messageType.ParameterType);
                    genericSubscribeMethod.Invoke(messageBus, new object[] { instanceOfType });
                }
            }
        }
MessageBusExtensions