public void Can_Call_Instance_No_Param()
 {
     var executor = new MessageHandlerMethodDispatcher(typeof(MessageHandler).GetMethod("InstanceHandleNoParam"), null);
     Assert.True(executor.IsInstanceMethod);
     executor.Execute(new MessageHandler());
     Assert.True(TestPassed, "Did Not Pass");
 }
Exemple #2
0
        private static object[] ResolveParameters(MessageHandlerMethodDispatcher handler, object message, IServiceLocator serviceLocator)
        {
            var requiresTargetParameter = handler.RequiresTarget;
            var parameters = new object[handler.ParameterTypes.Count + (requiresTargetParameter ? 1 : 0)];

            if (requiresTargetParameter)
            {
                parameters[0] = serviceLocator.Resolve(handler.TargetType) ?? Activator.CreateInstance(handler.TargetType);
                // TODO performance.cache a lambda expression to construct instead of Activator.CreateInstance
            }
            var pStart = (requiresTargetParameter ? 1 : 0);

            for (int i = 0; i < handler.ParameterTypes.Count; i++)
            {
                var parameterType = handler.ParameterTypes[i];
                if (parameterType.IsAssignableFrom(message.GetType()))
                {
                    parameters[pStart + i] = message; // shortcut for message, it's a known type
                    continue;
                }
                parameters[pStart + i] = serviceLocator.Resolve(parameterType);
            }
            return(parameters);
        }
 public void Handle <TMessage>(Action <TMessage, MessageContext> messageHandler)
 {
     MessageHandlers.AddMessageHandler(MessageHandlerMethodDispatcher.FromDelegate(messageHandler));
 }
 public void TestsShouldWork()
 {
     var executor = new MessageHandlerMethodDispatcher(typeof(MessageHandler).GetMethod("TestTest"), null);
     Assert.Throws<Exception>(() => executor.Execute(), "Test");
 }
 public void Can_Call_Static_Single_Param()
 {
     var executor = new MessageHandlerMethodDispatcher(typeof(MessageHandler).GetMethod("StaticHandleSingleParam"), null);
     Assert.False(executor.IsInstanceMethod);
     executor.Execute("p1");
     Assert.True(TestPassed, "Did Not Pass");
 }
 public void Can_Call_Lambda_Alt()
 {
     Action<object, MessageContext> f = (message, messageContext) =>
     {
         Assert.NotNull(message);
         Assert.NotNull(messageContext);
         MessageHandlerMethodDispatcherTests.TestPassed = true;
     };
     var executor = new MessageHandlerMethodDispatcher(f, null);
     executor.Execute("Message", Helpers.GetUninitializedObject<MessageContext>());
     Assert.True(TestPassed, "Did Not Pass");
 }