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"); }
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"); }