예제 #1
0
        /// <summary>
        /// Creates a Rules Engine.
        /// </summary>
        /// <param name="basedOn">Copies specific rules from base Engine</param>
        /// <param name="types">Copies rules for the specified types only.</param>
        public RulesEngine(RulesEngine basedOn, params Type[] types)
        {
            if (types == null)
            {
                throw new ArgumentNullException("types");
            }
            if (basedOn == null)
            {
                throw new ArgumentNullException("basedOn");
            }

            var registry = basedOn._registry.Clone();

            _expressionCache = basedOn._expressionCache;

            foreach (var type in types)
            {
                var invokers = registry.GetInvokers(type);
                foreach (var invoker in invokers)
                {
                    _registry.RegisterInvoker(invoker);
                }
            }
        }
 public EnumerableCompositionInvoker(RulesEngine rulesRulesEngine, Expression <Func <T, R> > enumerableCompositionExpression)
 {
     this.rulesRulesEngine            = rulesRulesEngine;
     _compiledExpression              = enumerableCompositionExpression.Compile();
     _enumerableCompositionExpression = rulesRulesEngine.ExpressionCache.Get(enumerableCompositionExpression);
 }
예제 #3
0
 internal ForClass(RulesEngine rulesRulesEngine)
 {
     this.rulesRulesEngine = rulesRulesEngine;
 }
예제 #4
0
 internal SetupClassEndIf(RulesEngine rulesRulesEngine, ForClassEndIf <T, ENDIF> parent, Expression <Func <T, R> > expression)
 {
     _expression           = expression;
     _parent               = parent;
     this.rulesRulesEngine = rulesRulesEngine;
 }
예제 #5
0
 internal SetupClass(RulesEngine rulesRulesEngine, ForClass <T> parent, Expression <Func <T, R> > expression)
 {
     this.expression       = expression;
     this.parent           = parent;
     this.rulesRulesEngine = rulesRulesEngine;
 }
예제 #6
0
 public static M CallValidateForEachElement <M, T, R>(this IMustPassRule <M, T, R> mpr, RulesEngine usingRulesEngine)
     where R : IEnumerable
     where M : ISetupClass
 {
     mpr.RulesRulesEngine.RegisterEnumerableComposition(mpr.Expression, usingRulesEngine);
     return(mpr.GetSelf());
 }
예제 #7
0
 public static M CallValidate <M, T, R>(this IMustPassRule <M, T, R> mpr, RulesEngine usingRulesEngine) where M : ISetupClass
 {
     usingRulesEngine.RegisterComposition(mpr.Expression, usingRulesEngine);
     return(mpr.GetSelf());
 }
예제 #8
0
 internal ForClassElseEndIf(RulesEngine rulesRulesEngine, ConditionalInvoker <T> conditionalInvoker, ENDIF parent)
 {
     this.rulesRulesEngine   = rulesRulesEngine;
     this.parent             = parent;
     this.conditionalInvoker = conditionalInvoker;
 }
예제 #9
0
 public ConditionalInvoker(Expression <Func <T, bool> > conditionalExpression, RulesEngine parent)
 {
     condition       = conditionalExpression.Compile();
     this.parent     = parent;
     this.innerTrue  = new RulesEngine();
     this.innerFalse = new RulesEngine();
 }
예제 #10
0
        public static void RegisterEnumerableComposition <T, R>(this IRegisterInvoker register, Expression <Func <T, R> > enumerableCompositionExpression, RulesEngine usingRulesEngine)
            where R : IEnumerable
        {
            var enumerableCompositionInvoker = new EnumerableCompositionInvoker <T, R>(usingRulesEngine, enumerableCompositionExpression);

            register.RegisterInvoker(enumerableCompositionInvoker);
        }
예제 #11
0
        public static void RegisterComposition <T, R>(this IRegisterInvoker register, Expression <Func <T, R> > compositionExpression, RulesEngine usingRulesEngine)
        {
            var compositionInvoker = new CompositionInvoker <T, R>(usingRulesEngine, compositionExpression);

            register.RegisterInvoker(compositionInvoker);
        }
예제 #12
0
 public CompositionInvoker(RulesEngine rulesRulesEngine, Expression <Func <T, R> > compositionExpression)
 {
     this.rulesRulesEngine   = rulesRulesEngine;
     this.compiledExpression = compositionExpression.Compile();
     this.cachedExpression   = rulesRulesEngine.ExpressionCache.Get(compositionExpression);
 }