Обнаружить несколько конкретных реализаций для запроса

В MediatR, IRequest всегда обрабатывается только одним IRequestHandler,

Предположим, одна случайно реализовала две конкретные реализации для одного и того же типа запроса (PingHandler а также PingHandler2). В этом случае MediatR отправляет запрос только последнему зарегистрированному обработчику (поскольку он использует GetInstance() из StructureMap/Lamar).

Первый обработчик запроса игнорируется.

Есть ли шанс обнаружить такую ​​ошибку?

using Lamar;
using MediatR;
using System;
using System.Threading;

namespace DDDTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var container = new Container(c =>
            {
                c.For<IMediator>().Use<Mediator>();
                c.For<ServiceFactory>().Use(ctx => ctx.GetInstance);

                // Alternative 1: Scanning
                c.Scan(s =>
                {
                    s.TheCallingAssembly();
                    s.ConnectImplementationsToTypesClosing(typeof(IRequestHandler<,>));
                });

                // Alternative 2: Direct registration, same effect
                //c.For<IRequestHandler<Ping>>().Use<PingHandler>();
                //c.For<IRequestHandler<Ping>>().Use<PingHandler2>();
            });

            var mediator = container.GetInstance<IMediator>();
            mediator.Send(new Ping());

            Console.ReadKey();
        }
    }

    public class Ping : IRequest
    {
    }

    public class PingHandler : RequestHandler<Ping>
    {
        protected override void Handle(Ping notification)
        {
            Console.WriteLine($"Pong from {Thread.CurrentThread.ManagedThreadId}");
        }
    }

    public class PingHandler2 : RequestHandler<Ping>
    {
        protected override void Handle(Ping notification)
        {
            Console.WriteLine($"Pong2 from {Thread.CurrentThread.ManagedThreadId}");
        }
    }
}

Для пояснения: я не хочу, чтобы вызывались несколько обработчиков запросов, я просто хочу определить, случайно, например, другой разработчик создал другой обработчик и переопределяет исходный обработчик.

0 ответов

Другие вопросы по тегам