Example #1
0
        /// <summary>
        /// 用于初始化的策略执行器,就是在程序运行期间只执行一次,除非sql的配置数据发生了改变
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        protected void DoLuaSqlInitPolicyExecutors(IDictionary <string, ISqlConfigPolicy> policies,
                                                   ILuaSqlPolicyExecutorInfo info)
        {
            var pinfo = (ILuaSqlInitPolicyExecutorInfo)info;
            ISqlConfigPolicy policy = null;

            if (policies?.Count > 0)
            {
                foreach (var pair in _luasqlInitPolicyExecutorsOrder)
                {
                    info.PolicyName = pair.Key;
                    //全局的策略对象
                    _globalPolicies.TryGetValue(pair.Key, out policy);
                    info.GlobalPolicy = policy;

                    //获取通过方法形参传递过来的策略对象
                    policies.TryGetValue(pair.Key, out policy);
                    info.ParameterPolicy = policy;

                    pair.Value.Item2.Invoke().Execute(pinfo);
                }
            }
            else
            {
                info.ParameterPolicy = null;
                foreach (var pair in _luasqlInitPolicyExecutorsOrder)
                {
                    info.PolicyName = pair.Key;
                    //全局的策略对象
                    _globalPolicies.TryGetValue(pair.Key, out policy);
                    info.GlobalPolicy = policy;
                    pair.Value.Item2.Invoke().Execute(pinfo);
                }
            }
        }
Example #2
0
 /// <summary>
 /// 执行相关的策略执行器
 /// </summary>
 public void InvokeExecutors(IDictionary <string, ISqlConfigPolicy> policies,
                             ILuaSqlPolicyExecutorInfo info, Type executorInfoBaseType)
 {
     if (executorInfoBaseType == _tILuaSqlInitPolicyExecutorInfo)
     {
         //在策略执行之前进行相应的初始化操作(优先级排序)
         _luasqlInitPolicyExecutorsOrderInit.Invoke(-1);
         DoLuaSqlInitPolicyExecutors(policies, info);
     }
     else if (executorInfoBaseType == _tILuaSqlPreExecutePolicyExecutorInfo)
     {
         _luasqlPreExecutePolicyExecutorsOrderInit.Invoke(-1);
         DoLuaSqlPreExecutePolicyExecutors(policies, info);
     }
     else if (executorInfoBaseType == _tILuaSqlExecutePolicyExecutorInfo)
     {
         _luasqlExecutePolicyExecutorsOrderInit.Invoke(-1);
         DoLuaSqlExecutePolicyExecutors(policies, info);
     }
     else
     {
         throw new ArgumentException($"Invalid type [{executorInfoBaseType.FullName}]", nameof(executorInfoBaseType));
     }
 }