Ejemplo n.º 1
0
 /// <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);
     }
 }
Ejemplo n.º 2
0
 private void EnsureServices(HttpContext context)
 {
     if (_hostingEnvironment == null)
     {
         _hostingEnvironment = context.RequestServices.GetService <IHostingEnvironment>();
     }
     if (_modelMetadataWrapperProvider == null)
     {
         _modelMetadataWrapperProvider = context.RequestServices.GetService <IModelMetadataWrapperProvider>();
     }
 }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
 public ModelMetadataPropertyWrapper(ModelMetadata modelMetadata, IModelMetadataWrapperProvider modelMetadataWrapperProvider)
 {
     this.ModelMetadata = modelMetadata;
     this.ModelTypeId   = ModelType.GetTypeId();
     modelMetadataWrapperProvider.RegisterModelType(this.ModelType);
 }