Пример #1
0
        private IEndpointInfo NGetEndpointInfoByParametersByDict(IList <IEndpointInfo> endPointsList, ICommand command)
        {
            var resultList = new List <IEndpointInfo>();

            var commandParamsDict = command.ParamsDict.ToDictionary(p => p.Key.NameValue.ToLower(), p => p.Value);

            foreach (var endPointInfo in endPointsList)
            {
                var argumentsDict = endPointInfo.Arguments.Where(p => !p.IsSystemDefiend).ToDictionary(p => p.Name, p => p);

                var isFitEndpoint = true;

                foreach (var commandParamItem in commandParamsDict)
                {
                    if (!argumentsDict.ContainsKey(commandParamItem.Key))
                    {
                        isFitEndpoint = false;
                        break;
                    }

                    var targetCommandValue = commandParamItem.Value;

                    var targetArgument = argumentsDict[commandParamItem.Key];

                    if (!_platformTypesConvertorsRegistry.CanConvert(targetCommandValue.GetType(), targetArgument.ParameterInfo.ParameterType))
                    {
                        isFitEndpoint = false;
                        break;
                    }
                }

                if (!isFitEndpoint)
                {
                    break;
                }

                resultList.Add(endPointInfo);
            }

            return(resultList.FirstOrDefault());
        }