コード例 #1
0
        private ParametersVersionAttribute(Type versionConverterType)
        {
            if (!typeof(IParametersVersionConverter).IsAssignableFrom(versionConverterType))
            {
                throw new InvalidCastException(
                          $"{versionConverterType.FullName} must implement {typeof(IParameterConverter).FullName}");
            }

            VersionConverter = (IParametersVersionConverter)Activator.CreateInstance(versionConverterType);
        }
コード例 #2
0
        private void ConvertParameters(Type paramsType, Version paramVersion,
                                       Action <IParameterConverter> converter)
        {
            IParametersVersionConverter versConv = null;
            var curParamVersion = new Version();

            paramsType.TryGetAttribute <ParametersVersionAttribute>(a =>
            {
                versConv        = a.VersionConverter;
                curParamVersion = a.Version;
            });

            if (curParamVersion != paramVersion)
            {
                if (curParamVersion > paramVersion)
                {
                    if (versConv != null)
                    {
                        if (versConv.ContainsKey(curParamVersion))
                        {
                            foreach (var conv in versConv.Where(
                                         v => v.Key > paramVersion && v.Key <= curParamVersion)
                                     .OrderBy(v => v.Key))
                            {
                                converter.Invoke(conv.Value);
                            }
                        }
                        else
                        {
                            throw new NullReferenceException($"{curParamVersion} version of parameters {paramsType.FullName} is not registered");
                        }
                    }
                    else
                    {
                        throw new NullReferenceException("Version converter is not set");
                    }
                }
                else
                {
                    throw new FutureVersionParametersException(paramsType, curParamVersion, paramVersion);
                }
            }
        }