public async Task TestMessageHandlerMethodFactoryOverride()
        {
            var serviceCollection = GetDefaultContainer();

            serviceCollection.AddServiceActivators <MyConfiguration>();
            var f = new DefaultMessageHandlerMethodFactory();

            f.SetArgumentResolvers(new List <IHandlerMethodArgumentResolver>()
            {
                new TestHandlerMethodArgumentResolver()
            });
            serviceCollection.AddSingleton <IMessageHandlerMethodFactory>(f);

            var container          = serviceCollection.BuildServiceProvider();
            var lifeCycleProcessor = await Start(container);

            var appContext = container.GetService <IApplicationContext>();
            var channel    = appContext.GetService <IMessageChannel>("foo");

            channel.Send(MessageBuilder.WithPayload("Bob Smith").Build());
            var outChan = appContext.GetService <IPollableChannel>("out");

            Assert.Equal("Person: Bob Smith", outChan.Receive().Payload);

            await lifeCycleProcessor.Stop();
        }
Esempio n. 2
0
        public void OverrideArgumentResolvers()
        {
            var instance        = new DefaultMessageHandlerMethodFactory();
            var customResolvers = new List <IHandlerMethodArgumentResolver>();

            customResolvers.Add(new CustomHandlerMethodArgumentResolver());
            instance.SetArgumentResolvers(customResolvers); // Override defaults

            var message = MessageBuilder <string> .WithPayload("sample").Build();

            // This will work as the local resolver is set
            var invocableHandlerMethod = CreateInvocableHandlerMethod(instance, "CustomArgumentResolver", typeof(CultureInfo));

            invocableHandlerMethod.Invoke(message);
            AssertMethodInvocation(sample, "CustomArgumentResolver");

            // This won't work as no resolver is known for the payload
            var invocableHandlerMethod2 = CreateInvocableHandlerMethod(instance, "SimpleString", typeof(string));

            Assert.Throws <MethodArgumentResolutionException>(() => invocableHandlerMethod2.Invoke(message));
        }