public void AddChildren(IEnumerable <ANamable> children) { foreach (IChild child in children.Cast <IChild>()) { child.AddParent(this); } Upstreams.AddRange(children.OfType <AMessageModule>()); Config.AddRange(children.OfType <AConfig>()); }
/// <summary> /// 产生路由值 /// </summary> /// <param name="requestData"></param> /// <returns></returns> public IReadOnlyDictionary <string, string> Match(RouteRequestData requestData) { if (Upstreams.Any() == false) { return(new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)); } foreach (var item in Upstreams) { var values = item.GetRouteValues(requestData); if (values != null) { return(values); } } return(null); }
private IReadOnlyDictionary <string, string> TryGetRouteValues(HttpRequestMessage request) { var routeData = request.GetRouteData(); if (routeData?.RouteRule == this) { return(routeData.Values); } else if (Upstreams.Any()) { return(Match(new RouteRequestData(request))); } else { return(new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)); } }
protected override IObservable <Message> GetMessagingSource() { if (Upstreams.Count > 2) { logger.Warn("More than two upstream modules for Recombine:{0}", Name); } if (Upstreams.Count < 2) { logger.Fatal("Not enough upstream modules for Recombine:{0}. Needs 2", Name); throw new InvalidOperationException("Not enough upstream sources for Recombine module"); } // Use Zip instead of Merge because we want only two parents var parents = Upstreams.Take(2); var pairings = parents.First().Pipeline.Zip <Message, Message, (Message, Message)>(parents.Last().Pipeline, (mum, dad) => (mum, dad)); return(from p in pairings where p.Item1 is XMLMessage && p.Item2 is XMLMessage let offspring = GenerateOffspring(p, Offspring) where offspring != null from o in offspring select o); }
IEnumerable <ANamable> IParent.GetChildren() { return(Upstreams.Cast <ANamable>().Union(Config.Cast <ANamable>())); }