private IMessageRoute routeFor(object message) { if (message == null) { throw new ArgumentNullException(nameof(message)); } var topicName = _rule.DetermineTopicName(message); if (!_routeForTopics.TryFind(topicName, out var route)) { var uri = _router.BuildUriForTopic(topicName); route = _messageTypeRouting.DetermineDestinationRoute(uri); _routeForTopics = _routeForTopics.AddOrUpdate(topicName, route); } return(route); }