/// <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); } } }
/// <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)); } }