public AssignInventoryPolicy()
 {
     _ruleRepository = new RuleRepository();
     _ruleRepository.Load(x => x.From(typeof(HasInventoryRule)));
     var rc = new RuleCompiler();
     var rules = _ruleRepository.GetRuleSets();
     _factory = rc.Compile(rules);
 }
        public AcceptOrderPolicy(IInventoryLevels inventoryLevels)
        {
            _inventoryLevels = inventoryLevels;
            var rc = new RuleCompiler();
            var ruleRepo = new RuleRepository();
            ruleRepo.Load(x => x.From(typeof(HasInventoryRule),
                typeof(DoWeHaveEnoughInventory),
                typeof(NeedShippingOptionsRule),
                typeof(InternationalShipping),
                typeof(RejectShippingOptionBasedOnNexus)));

            _sessionFactory = rc.Compile(ruleRepo.GetRuleSets().Where(rs=>rs.Name == "AcceptOrderPolicy"));
        }
Esempio n. 3
1
        private static void Main(string[] args)
        {
            //Load rules
            var repository = new RuleRepository();
            repository.Load(x => x.From(Assembly.GetExecutingAssembly()));

            //Compile rules
            var factory = repository.Compile();

            //Create a working session
            var session = factory.CreateSession();

            //Load domain model
            var customer1 = new Customer("John Doe") { IsPreferred = true };
            var account11 = new Account("12456789", customer1);
            var account12 = new Account("12456790", customer1);
            var account13 = new Account("12456791", customer1) {IsActive = false, IsDelinquent = true};
            var order11 = new Order(123456, customer1, 2, 25.0);
            var order12 = new Order(123457, customer1, 1, 100.0);
            var order13 = new Order(123458, customer1, 1, 5.0);

            var customer2 = new Customer("Sarah Jones");
            var account21 = new Account("22456789", customer2);
            var order21 = new Order(223456, customer2, 2, 2225.0);

            //Insert facts into rules engine's memory
            session.Insert(customer1);
            session.Insert(account11);
            session.Insert(account12);
            session.Insert(account13);
            session.Insert(order11);
            session.Insert(order12);
            session.Insert(order13);

            session.Insert(customer2);
            session.Insert(account21);
            session.Insert(order21);

            //Start match/resolve/act cycle
            session.Update(customer1);
            session.Fire();
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            var repository = new RuleRepository();
            repository.Load("Test", x => x.From(typeof(AssignFirstSeat).Assembly));

            var factory = repository.Compile();
            var session = factory.CreateSession();
            session.Events.FactInsertedEvent += EventProviderOnFactInsertedEvent;
            session.Events.FactUpdatedEvent += EventProviderOnFactUpdatedEvent;
            session.Events.FactRetractedEvent += EventProviderOnFactRetractedEvent;
            session.Events.ActivationCreatedEvent += EventProviderOnActivationCreatedEvent;
            session.Events.ActivationDeletedEvent += EventProviderOnActivationDeletedEvent;
            session.Events.RuleFiringEvent += EventProviderOnRuleFiringEvent;

            session.Insert(new Guest("N1", Gender.Male, new Hobby("H1")));
            session.Insert(new Guest("N2", Gender.Female, new Hobby("H1")));
            session.Insert(new Guest("N2", Gender.Female, new Hobby("H3")));
            session.Insert(new Guest("N3", Gender.Male, new Hobby("H3")));
            session.Insert(new Guest("N4", Gender.Male, new Hobby("H1")));
            session.Insert(new Guest("N4", Gender.Female, new Hobby("H2")));
            session.Insert(new Guest("N4", Gender.Female, new Hobby("H3")));
            session.Insert(new Guest("N5", Gender.Female, new Hobby("H2")));
            session.Insert(new Guest("N5", Gender.Female, new Hobby("H1")));
            session.Insert(new Count(1));
            session.Insert(new LastSeat(5));

            var context = new Context();
            session.Insert(context);

            session.Fire();
        }
Esempio n. 5
0
        private static void Main(string[] args)
        {
            var repository = new RuleRepository();
            repository.Load(x => x.From(Assembly.GetExecutingAssembly()));

            ISessionFactory factory = repository.Compile();
            ISession session = factory.CreateSession();

            session.Insert(new Fact1 { Value = "TestValue" });

            VisualizerHost.Visualize(session);
        }
Esempio n. 6
0
        private static void Main(string[] args)
        {
            var dwelling = new Dwelling {Address = "1 Main Street, New York, NY", Type = DwellingTypes.SingleHouse};
            var dwelling2 = new Dwelling {Address = "2 Main Street, New York, NY", Type = DwellingTypes.SingleHouse};
            var policy1 = new Policy {Name = "Silver", PolicyType = PolicyTypes.Home, Price = 1200, Dwelling = dwelling};
            var policy2 = new Policy {Name = "Gold", PolicyType = PolicyTypes.Home, Price = 2300, Dwelling = dwelling2};
            var customer1 = new Customer {Name = "John Do", Age = 22, Sex = SexTypes.Male, Policy = policy1};
            var customer2 = new Customer {Name = "Emily Brown", Age = 32, Sex = SexTypes.Female, Policy = policy2};

            var repository = new RuleRepository();
            repository.Load("Test", x => x.From(typeof (Program).Assembly));
            var ruleSets = repository.GetRuleSets();

            IRuleCompiler compiler = new RuleCompiler();
            ISessionFactory factory = compiler.Compile(ruleSets);
            ISession session = factory.CreateSession();

            session.Insert(policy1);
            session.Insert(policy2);
            session.Insert(customer1);
            session.Insert(customer2);
            session.Insert(dwelling);
            session.Insert(dwelling2);

            customer1.Age = 10;
            session.Update(customer1);

            session.Retract(customer2);

            session.Fire();

            session.Insert(customer2);

            session.Fire();

            customer1.Age = 30;
            session.Update(customer1);

            session.Fire();
        }
Esempio n. 7
0
 private ISessionFactory CreateTarget()
 {
     var repository = new RuleRepository();
     repository.Load(x => x.From(typeof(OneFactRule)));
     return repository.Compile();
 }