void InitializeFromConfiguration(RoutingConfiguration configuration)
        {
            Contract.Requires(configuration != null);

            this.topicTemplateTable = new UriTemplateTable(
                BaseUri,
                (from route in configuration.InboundRoutes
                    from template in route.Templates
                    select new KeyValuePair<UriTemplate, object>(new UriTemplate(template, false), route)));
            this.topicTemplateTable.MakeReadOnly(true);
            this.routeTemplateMap = configuration.OutboundRoutes.ToDictionary(x => x.Type, x => new UriPathTemplate(x.Template));
        }
 public object Create(object parent, object configContext, XmlNode section)
 {
     var configuration = new RoutingConfiguration();
     configuration.InboundRoutes.AddRange(section
         .OfType<XmlElement>()
         .Where(x => "inboundRoute".Equals(x.Name, StringComparison.OrdinalIgnoreCase))
         .Select(route => InboundRouteDefinition.Create(
             route.OfType<XmlElement>().Where(x => "template".Equals(x.Name, StringComparison.OrdinalIgnoreCase)).Select(x => x.InnerText),
             ParseInboundRouteType(route.GetAttribute("to")))));
     configuration.OutboundRoutes.AddRange(section
         .OfType<XmlElement>()
         .Where(x => "outboundRoute".Equals(x.Name, StringComparison.OrdinalIgnoreCase))
         .Select(route => OutboundRouteDefinition.Create(
             ParseOutboundRouteType(route.GetAttribute("from")),
             route.OfType<XmlElement>().Single(x => "template".Equals(x.Name, StringComparison.OrdinalIgnoreCase)).InnerText)));
     return configuration;
 }
 public ConfigurableMessageRouter(RoutingConfiguration configuration)
 {
     this.InitializeFromConfiguration(configuration);
 }
 public TopicNameRouter(RoutingConfiguration configuration)
 {
     this.InitializeFromConfiguration(configuration);
 }