Пример #1
0
        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);
        }