Right now, RebusBus InternalSend overloads always end up calling Transport's Send method, but the only way to know if the call is due a Publish operation or a Send operation, is by checking if 'Multicast' header has been set. And we need to make this check, so we can prefix destination address with an '@' when using one-exchange-per-type routing... so route decision logic (ie. GetExchangeAndRoutingKeyFor) can now we are refering to an exchange as destination address.

An alternative option would have been overwritting GetEventName so it returned the eventName prefixed by '@' when using one-exchange-per-type routing, but that seemed even more intrusive and GetEventName was used by other code paths.. so I dropped this idea in favor of the current one.

I am not sure I like this solution, and I may see this as another case where having a SubscriptionManager (or something alike) in charge of deciding where to publish/send on each case would have helped a bit. I mean, maybe all this routing decision logic could (maybe) placed inside such SubscriptionManager, which would be the one which can be swapped on each case... Opinions here?