Esempio n. 1
0
        public RequestVersionProvider(IEnumerable <IRequestVersionParser> versionParsers,
                                      IOptions <ApiActionConfiguration> configurationAccessor, IVersionEdgeProvider versionEdgeProvider,
                                      IApiActionRegistrationProvider apiActionRegistrationProvider)
        {
            if (versionParsers == null)
            {
                throw new ArgumentNullException(nameof(versionParsers));
            }
            if (configurationAccessor == null)
            {
                throw new ArgumentNullException(nameof(configurationAccessor));
            }
            if (versionEdgeProvider == null)
            {
                throw new ArgumentNullException(nameof(versionEdgeProvider));
            }
            if (apiActionRegistrationProvider == null)
            {
                throw new ArgumentNullException(nameof(apiActionRegistrationProvider));
            }

            _versionParsers = versionParsers.ToArray();
            if (!ApiActionVersion.TryParse(configurationAccessor.Value.DefaultRequestVersion, out _defaultVersion))
            {
                _defaultVersion = versionEdgeProvider
                                  .GetVersionEdges(apiActionRegistrationProvider.Registrations
                                                   .Select(r => r.ApiActionType).ToList()).OrderByDescending(v => v)
                                  .FirstOrDefault()
                                  ?? new ApiActionVersion(1, 0);
            }
        }
Esempio n. 2
0
 public SwaggerApiActionRegistrationProvider(IApiActionRegistrationProvider registrationProvider,
                                             IVersionEdgeProvider versionEdgeProvider)
 {
     _registrationProvider = registrationProvider;
     _versionEdgeProvider  = versionEdgeProvider;
     if (registrationProvider == null)
     {
         throw new ArgumentNullException(nameof(registrationProvider));
     }
     if (versionEdgeProvider == null)
     {
         throw new ArgumentNullException(nameof(versionEdgeProvider));
     }
 }
Esempio n. 3
0
        GeneratePreCalcs(IApiActionRegistrationProvider registrationProvider,
                         IVersionEdgeProvider versionEdgeProvider)
        {
            var preCalc       = new List <Tuple <ApiActionVersion, ApiActionVersion, IApiActionRegistration> >();
            var registrations = registrationProvider.Registrations;
            var walkingArray  = new Type[1];

            foreach (var reg in registrations)
            {
                if (reg.ApiActionType.GetTypeInfo().GetCustomAttributes(true).OfType <NoDocAttribute>()
                    .Any(a => a.HideFromDocumentation))
                {
                    continue;
                }

                walkingArray[0] = reg.ApiActionType;
                var edges = versionEdgeProvider.GetVersionEdges(walkingArray);

                if (edges == null || edges.Length == 0)
                {
                    preCalc.Add(new Tuple <ApiActionVersion, ApiActionVersion, IApiActionRegistration>(null, null, reg));
                }
                else if (edges.Length == 1)
                {
                    preCalc.Add(
                        new Tuple <ApiActionVersion, ApiActionVersion, IApiActionRegistration>(edges[0], edges[0], reg));
                }
                else if (edges.Length == 2)
                {
                    var minEdge = edges[0];
                    var maxEdge = edges[1];

                    if (minEdge > maxEdge)
                    {
                        minEdge = edges[1];
                        maxEdge = edges[0];
                    }

                    preCalc.Add(
                        new Tuple <ApiActionVersion, ApiActionVersion, IApiActionRegistration>(minEdge, maxEdge, reg));
                }
                else
                {
                    // TODO?: Log warning
                }
            }

            return(preCalc.ToArray());
        }