/// <summary> /// The main method for tules evaluation. /// </summary> public void Run() { DateTime now = DateTime.Now; if (loadRulesFromAssemblies.HasValue ? loadRulesFromAssemblies.Value : options.LoadRulesFromAssemblies) { if (String.IsNullOrEmpty(_rulesFolder)) { if (Path.IsPathRooted(options.RuleFolder)) { _rulesFolder = options.RuleFolder; } else { _rulesFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, options.RuleFolder); } } ProductionLoader.Instance.RulesDirectory = RulesFolder; ProductionLoader.Instance.RuleChanged += Instance_RuleChanged; foreach (IProductionProvider ruleSetProvider in ProductionLoader.Instance.RuleSets) { if (ruleSetProvider.EffectiveDate <= now && ruleSetProvider.TerminationDate > now) { foreach (Aggregator aggregator in ruleSetProvider.GetAggregators()) { AddAggregator(aggregator); } foreach (Production production in ruleSetProvider.GetProductions()) { AddProduction(production); } foreach (Override @override in ruleSetProvider.GetOverrides()) { AddOverride(@override); } foreach (Mutex mutex in ruleSetProvider.GetMutexes()) { AddMutex(mutex); } } } ProductionLoader.Instance.RuleChanged -= Instance_RuleChanged; } foreach (Production prod in _productions.Values) { _rete.AddProduction(prod); } foreach (Mutex mut in _mutexesNew) { _rete.AddMutex(mut); } foreach (Aggregator ag in _aggregators) { _rete.AddAggregator(ag); } foreach (WME wme in _initialFacts) { _rete.AddWME(wme); } EvaluateOverrides(); EvaluateAggregators(); ResolveConflicts(); Activate(); ResolveMutexes(); }