public static void RegisterGlobal(params Func <IQueryInjectorBuilder, IReplaceRule>[] replaceRules) { var builder = new QueryInjectorBuilder(); var encounterObjs = replaceRules.Select(encounterFunc => encounterFunc(builder)).ToList(); lock (_replaceRules) _replaceRules.AddRange(encounterObjs); }
private Expression TranslateRegisterCall(MethodCallExpression node) { //First argument is the source var secondArgument = (ConstantExpression)node.Arguments[1]; var replaceRules = secondArgument.Value as Func <IQueryInjectorBuilder, IReplaceRule>[]; var builder = new QueryInjectorBuilder(); var encounterObjs = replaceRules.Select(encounterFunc => encounterFunc(builder)).Concat(_replaceRulesContext.Peek()); _replaceRulesContext.Push(new List <IReplaceRule>(encounterObjs)); var returnExpression = Visit(node.Arguments[0]); _replaceRulesContext.Pop(); return(returnExpression); }