/// <summary> /// Loads a context by a given identifier based on a passed in repository /// </summary> /// <param name="identifier">Identifier representing a context</param> /// <param name="ruleExecuter">Passed in empty rule executer</param> /// <param name="ruleRepository">Repository for saved rules</param> /// <param name="ruleTemplateFactory">Factory for service specific templates</param> /// <returns></returns> public static async Task <RuleContext <TFact, TOutput> > LoadContext( Guid identifier, IRuleExecuter <TFact, TOutput> ruleExecuter, IRuleRepository ruleRepository, IRuleTemplateFactory <TFact, TOutput> ruleTemplateFactory) { var rules = await ruleRepository.GetRulesByContext(identifier); var context = new RuleContext <TFact, TOutput>(ruleExecuter, ruleRepository, identifier, ruleTemplateFactory); foreach (var ruleData in rules) { var condition = ruleTemplateFactory .CreateCondition(ruleData.ConditionType, ruleData.ConditionData); var consequence = ruleTemplateFactory .CreateConsequence(ruleData.ConsequenceType, ruleData.ConsequenceData); var template = new RuleTemplate <TFact, TOutput>(condition, consequence); ruleExecuter.AddRule(ruleData.Id, template.Rule); } return(context); }