Routing-Key DI Dispatch (routing key → handler)

Idea

Use the RabbitMQ routing key as the DI key to resolve a handler. The dispatcher pulls the routing key from the message and asks the container for the handler registered under that exact key.


Minimal pieces (generalised)

Handler contract

public interface IRabbitMessageHandler
{
    Task HandleAsync(object model);
}

Keyed registrations (routing key == DI key)

services.AddKeyedScoped<IRabbitMessageHandler, NotificationHandler>("notification.*");
services.AddKeyedScoped<IRabbitMessageHandler, EmailReceivedHandler>("accesspay.email.received");

Dispatcher

var key = eventArgs.RoutingKey; // from RabbitMQ delivery
var handler = keyedFactory.GetRequiredKeyedService<IRabbitMessageHandler>(key);
await handler.HandleAsync(model);

Notes