/// <summary> /// Create a new instance of the <see cref="ModelMetadataWrapper"/>. /// </summary> /// <param name="modelMetadata">The <see cref="Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata"/>.</param> /// <param name="modelMetadataWrapperProvider">The <see cref="IModelMetadataWrapperProvider"/>.</param> public ModelMetadataWrapper(ModelMetadata modelMetadata, IModelMetadataWrapperProvider modelMetadataWrapperProvider) { this.ModelMetadata = modelMetadata; this.ModelTypeId = ModelType.GetTypeId(); modelMetadataWrapperProvider.RegisterModelType(this.ModelType); modelMetadataWrapperProvider.RegisterModelMetadataWrapper(this); if (modelMetadata.ElementMetadata != null) { this.ElementMetadataWrapper = modelMetadataWrapperProvider.GetOrCreate(modelMetadata.ElementMetadata.ModelType); } }
private void EnsureServices(HttpContext context) { if (_hostingEnvironment == null) { _hostingEnvironment = context.RequestServices.GetService <IHostingEnvironment>(); } if (_modelMetadataWrapperProvider == null) { _modelMetadataWrapperProvider = context.RequestServices.GetService <IModelMetadataWrapperProvider>(); } }
/// <summary> /// Creates a new instance of <see cref="ApiDescriptionDetailModelProvider"/>. /// </summary> /// <param name="modelMetadataWrapperProvider">The <see cref="IModelMetadataWrapperProvider"/>.</param> /// <param name="apiDescriptionGroupModelCollectionProvider">The <see cref="IApiDescriptionGroupModelCollectionProvider"/>.</param> /// <param name="objectGenerator"></param> /// <param name="documentationProvider"></param> /// <param name="loggerFactory"></param> public ApiDescriptionDetailModelProvider( IModelMetadataWrapperProvider modelMetadataWrapperProvider, IApiDescriptionGroupModelCollectionProvider apiDescriptionGroupModelCollectionProvider, IObjectGenerator objectGenerator, IDocumentationProvider documentationProvider, ILoggerFactory loggerFactory) { _modelMetadataWrapperProvider = modelMetadataWrapperProvider; _objectGenerator = objectGenerator; _documentationProvider = documentationProvider; _logger = loggerFactory.CreateLogger <ApiDescriptionDetailModelProvider>(); var apiDescriptionGroupModels = apiDescriptionGroupModelCollectionProvider .ApiDescriptionGroups .Items .SelectMany(g => g.Items) .ToList(); foreach (var item in apiDescriptionGroupModels.GroupBy(o => o.Id).Where(p => p.Count() > 1)) { var controllerActionDescriptors = item.Select(o => o.ApiDescription.ActionDescriptor) .OfType <ControllerActionDescriptor>() .Select(p => new JObject { { "ControllerName", p.ControllerName }, { "ActionName", p.ActionName }, { "RouteTemplate", p.AttributeRouteInfo.Template }, }); _logger.LogWarning($"dumplicate web apis with the same route template.{Environment.NewLine}{JsonConvert.SerializeObject(controllerActionDescriptors, Formatting.Indented)}"); } var dictionary = apiDescriptionGroupModels .Distinct() .ToDictionary(o => o.Id, o => CreateApiDescriptionDetailModel(o)); //TODO Maybe exits dumpliate ids. _apiDescriptionDetailModelCache = new ReadOnlyDictionary <string, ApiDescriptionDetailModel>(dictionary); }
public ModelMetadataPropertyWrapper(ModelMetadata modelMetadata, IModelMetadataWrapperProvider modelMetadataWrapperProvider) { this.ModelMetadata = modelMetadata; this.ModelTypeId = ModelType.GetTypeId(); modelMetadataWrapperProvider.RegisterModelType(this.ModelType); }