コード例 #1
0
        public void Setup()
        {
            _called = null;

            var configurator = new OdoyuleRuntimeConfigurator();

            var productionNode = new DelegateProductionNode <A>(16, (session, x) => _called = x);

            var constantNode = new ConstantNode <A>(42);

            var joinNode = configurator.CreateNode(id => new JoinNode <A>(id, constantNode));

            var constantNode2 = new ConstantNode <A>(27);

            var joinNode2 = configurator.CreateNode(id => new JoinNode <A>(id, constantNode2));

            joinNode2.AddActivation(productionNode);

            joinNode.AddActivation(joinNode2);

            var engine = new OdoyuleRulesEngine(configurator);

            AlphaNode <A> alphaNode = engine.GetAlphaNode <A>();

            alphaNode.AddActivation(joinNode);

            using (Session session = engine.CreateSession())
            {
                session.Add(new A());
                session.Run();
            }
        }
コード例 #2
0
        public void Setup()
        {
            _called = null;

            var configurator = new OdoyuleRuntimeConfigurator();

            var engine = configurator.RulesEngine;

            PropertyNode<A, decimal> propertyNode = configurator.Property<A, decimal>(x => x.Amount);

            ConditionNode<Token<A, decimal>> conditionNode = configurator.Condition<A, decimal>(x => x > 10000.0m);
            propertyNode.AddActivation(conditionNode);

            AlphaNode<Token<A, decimal>> edgeAlpha = configurator.Alpha<A, decimal>();
            conditionNode.AddActivation(edgeAlpha);

            AlphaNode<A> alphaNode = configurator.GetAlphaNode<A>();
            alphaNode.AddActivation(propertyNode);

            JoinNode<A> joinNode = configurator.Join(alphaNode);

            DelegateProductionNode<A> productionNode = configurator.Delegate<A>((session,x) => _called = x);
            joinNode.AddActivation(productionNode);

            LeftJoinNode<A, decimal> leftNode = configurator.Left<A, decimal>(alphaNode);
            leftNode.AddActivation(joinNode);

            edgeAlpha.AddActivation(leftNode);

            using (Session session = engine.CreateSession())
            {
                session.Add(new A(10001.0m));
                session.Run();
            }
        }
コード例 #3
0
        public void Setup()
        {
            _called = null;

            var configurator = new OdoyuleRuntimeConfigurator();

            var engine = configurator.RulesEngine;

            var propertyNode = configurator.Property((A x) => x.Amount) as PropertyNode <A, decimal, decimal>;

            ConditionNode <Token <A, decimal> > conditionNode = configurator.Condition <A, decimal>(x => x > 10000.0m);

            propertyNode.AddActivation(conditionNode);

            AlphaNode <Token <A, decimal> > edgeAlpha = configurator.Alpha <A, decimal>();

            conditionNode.AddActivation(edgeAlpha);

            AlphaNode <A> alphaNode = configurator.GetAlphaNode <A>();

            alphaNode.AddActivation(propertyNode);

            JoinNode <A> joinNode = configurator.Join(alphaNode);

            DelegateProductionNode <A> productionNode = configurator.Delegate <A>((session, x) => _called = x);

            joinNode.AddActivation(productionNode);

            LeftJoinNode <A, decimal> leftNode = configurator.Left <A, decimal>(alphaNode);

            leftNode.AddActivation(joinNode);

            edgeAlpha.AddActivation(leftNode);

            using (Session session = engine.CreateSession())
            {
                session.Add(new A(10001.0m));
                session.Run();
            }
        }
コード例 #4
0
        public void Setup()
        {
            _called = null;

            var configurator = new OdoyuleRuntimeConfigurator();

            var productionNode = new DelegateProductionNode<Tuple<A,B>>(16, (session, x) => _called = x);

            var constantNode = new ConstantNode<A>(42);

            JoinNode<A> joinNodeA = configurator.CreateNode(id => new JoinNode<A>(id, constantNode));

            var constantNode2 = new ConstantNode<B>(27);

            JoinNode<B> joinNodeB = configurator.CreateNode(id => new JoinNode<B>(id, constantNode2));

            OuterJoinNode<A, B> outerJoinNode = configurator.CreateNode(id => new OuterJoinNode<A, B>(id, joinNodeB));
            outerJoinNode.AddActivation(productionNode);

            joinNodeA.AddActivation(outerJoinNode);

            var engine = new OdoyuleRulesEngine(configurator);

            AlphaNode<A> alphaNode = engine.GetAlphaNode<A>();
            alphaNode.AddActivation(joinNodeA);

            AlphaNode<B> alphaNodeB = engine.GetAlphaNode<B>();
            alphaNodeB.AddActivation(joinNodeB);

            using (Session session = engine.CreateSession())
            {
                session.Add(new A());
                session.Add(new B());
                session.Run();
            }
        }