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