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
- Exact match: DI keys are exact strings; they don’t support */#.
- Wildcards are Rabbit-side only: */# work in exchange bindings, not in DI lookups.
- Separation: Transport decides the routing key; your app resolves the matching handler via DI.