Пример #1
0
        public async Task <IActionResult> Index([FromBody] SensorDto dto, [FromServices] IRuleExecutor executor)
        {
            dto.CreationTime = DateTime.UtcNow;
            var result = await executor.Execute(dto);

            return(Ok(result));
        }
Пример #2
0
        public WorkflowStageObject(IRuleExecutor ruleExecutor, List <WorkflowStageObject <TWorkflowRequest> > workflowStageObjects, string uniqStageId, string workflowStageDescription)
        {
            _workflowStageDescription = workflowStageDescription;
            _workflowStageObjects     = workflowStageObjects;
            _uniqStageId = uniqStageId;

            _ruleExecutor      = ruleExecutor;
            WorkflowStageRules = new List <WorkflowRule <TWorkflowRequest, BaseRule <TWorkflowRequest> > >();
        }
Пример #3
0
        public RuleChecker(Rule rule)
        {
            _rule = rule;

            if (string.IsNullOrEmpty(rule.TypeName))
            {
                _executor = new RegexRuleExecutor();
            }
            else
            {
                Type t = Type.GetType(rule.TypeName);
                _executor = (IRuleExecutor)Activator.CreateInstance(t);
            }
        }
Пример #4
0
        public static IRuleExecutor GetRuleExecutor(Rule rule)
        {
            if (containers.ContainsKey(rule.RuleExpressionType.ToString()))
            {
                return(containers[rule.RuleExpressionType.ToString()]);
            }
            IRuleExecutor ruleExecutor = null;

            switch (rule.RuleExpressionType)
            {
            default:
                ruleExecutor = new LambdaRuleExecutor();
                break;

            /// 定义的其他类型
            case RuleExpressionType.CompareNotContains:
            case RuleExpressionType.CompareContains:
            case RuleExpressionType.CompareEquals:
            case RuleExpressionType.CompareNotEquals:
            case RuleExpressionType.ValueNullOrEmpty:
            case RuleExpressionType.ValueExists:
            case RuleExpressionType.CompareGreater:
            case RuleExpressionType.CompareSmaller:
                if (containers.Any())
                {
                    var excutor = containers.First(exe => exe.Value.GetType() == typeof(CompareRuleExecutor));
                    if (excutor.Value != null)
                    {
                        return(excutor.Value);
                    }
                }
                ruleExecutor = new CompareRuleExecutor();
                break;
            }
            if (containers.ContainsKey(rule.RuleExpressionType.ToString()))
            {
                return(containers[rule.RuleExpressionType.ToString()]);
            }
            containers.Add(rule.RuleExpressionType.ToString(), ruleExecutor);
            return(ruleExecutor);
        }
Пример #5
0
 public WorkflowRule(IRuleExecutor <TWorkflowStageRule> ruleExecutor, Func <BaseRule <TWorkflowRequest>, bool> ruleFunc)
 {
     RuleExecutor = ruleExecutor;
     RuleFunc     = ruleFunc;
 }
 public IsRequestDocumentHasStageByStageCodeAndDocumentCodesRule(IRuleExecutor ruleExecutor)
 {
     _ruleExecutor = ruleExecutor;
 }
 public IsRequestDocumentHasStageByStageCodeAndDocumentCodeAndLaterCurrentStageRule(IRuleExecutor ruleExecutor)
 {
     _ruleExecutor = ruleExecutor;
 }
Пример #8
0
        public override DiscountEngineResult Execute(CustomerInfo input, DiscountPolicyFacts fact, IRuleExecutor executor)
        {
            var firstTimeCustomerDiscount = executor.Execute(_firstTimeCustomerPolicy, input, fact);
            var frequentCustomerDiscount  = executor.Execute(_frequentCustomerPolicy, input, fact);
            var bulkPurchaseDiscount      = executor.Execute(_bulkPurchasePolicy, input, fact);

            return(new DiscountEngineResult {
                IsBulkPuchaseDiscountApplied = bulkPurchaseDiscount != default,
                IsFirstTimeDiscountApplied = firstTimeCustomerDiscount != default,
                IsFrequentPurchaseDiscountApplied = frequentCustomerDiscount != default,
                DiscountApplied = input.MaxAdjustmentsAllowed * (firstTimeCustomerDiscount + frequentCustomerDiscount + bulkPurchaseDiscount)
            });
Пример #9
0
 public RuleContext(Rule rule, IDictionary <string, object> input)
 {
     this.rule     = rule;
     this.input    = input;
     this.executor = GetRuleExecutor(rule);
 }
Пример #10
0
 public RuleContext(IRuleExecutor ruleExecutor)
 {
     this.executor = ruleExecutor;
 }
 public abstract TResult Execute(TInput input, TFact fact, IRuleExecutor executor);
 IRuleEngineResult IRuleEngine.Execute(IRuleEngineInput input, IRuleEngineFacts fact,
                                       IRuleExecutor executor) => Execute((TInput)input, (TFact)fact, executor);
Пример #13
0
 public IsAnyDocumentHasOutgoingNumberAndSendDateByCodesRule(IRuleExecutor ruleExecutor)
 {
     _ruleExecutor = ruleExecutor;
 }