/// <summary>
 /// Creates a new instance of <see cref="ApiDescriptionGroupCollectionProvider"/>.
 /// </summary>
 /// <param name="actionDescriptorCollectionProvider">
 /// The <see cref="IActionDescriptorCollectionProvider"/>.
 /// </param>
 /// <param name="apiDescriptionProviders">
 /// The <see cref="IEnumerable{IApiDescriptionProvider}"/>.
 /// </param>
 public ApiDescriptionGroupCollectionProvider(
     IActionDescriptorCollectionProvider actionDescriptorCollectionProvider,
     IEnumerable<IApiDescriptionProvider> apiDescriptionProviders)
 {
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
     _apiDescriptionProviders = apiDescriptionProviders.OrderBy(item => item.Order).ToArray();
 }
 private void PrepareCache(IActionDescriptorCollectionProvider provider)
 {
     var controllerActionDescriptors = provider
         .ActionDescriptors
         .Items
         .OfType<ControllerActionDescriptor>();
     
     foreach (var descriptor in controllerActionDescriptors)
     {
         Cache.TryAdd(descriptor.MethodInfo, descriptor);
     }
 }
示例#3
0
 public ODataActionSelector(IODataRoutingConvention convention,
     IActionDescriptorCollectionProvider actionDescriptorsCollectionProvider,
     IActionSelectorDecisionTreeProvider decisionTreeProvider,
     IEnumerable<IActionConstraintProvider> actionConstraintProviders,
     ILoggerFactory loggerFactory)
 {
     
     _selector = new ActionSelector(decisionTreeProvider, 
         new ActionConstraintCache(actionDescriptorsCollectionProvider, actionConstraintProviders), 
         loggerFactory);
     _convention = convention;
 }
示例#4
0
        public AttributeRoute(
            IRouter target,
            IActionDescriptorCollectionProvider actionDescriptorCollectionProvider,
            IInlineConstraintResolver constraintResolver,
            ObjectPool<UriBuildingContext> contextPool,
            UrlEncoder urlEncoder,
            ILoggerFactory loggerFactory)
        {
            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            if (actionDescriptorCollectionProvider == null)
            {
                throw new ArgumentNullException(nameof(actionDescriptorCollectionProvider));
            }

            if (constraintResolver == null)
            {
                throw new ArgumentNullException(nameof(constraintResolver));
            }

            if (contextPool == null)
            {
                throw new ArgumentNullException(nameof(contextPool));
            }

            if (urlEncoder == null)
            {
                throw new ArgumentNullException(nameof(urlEncoder));
            }

            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            _target = target;
            _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
            _constraintResolver = constraintResolver;
            _contextPool = contextPool;
            _urlEncoder = urlEncoder;
            _loggerFactory = loggerFactory;
        }
示例#5
0
        private static AttributeRoute CreateRoute(
            IRouter handler, 
            IActionDescriptorCollectionProvider actionDescriptorProvider)
        {
            var constraintResolver = new Mock<IInlineConstraintResolver>();
            constraintResolver
                .Setup(c => c.ResolveConstraint("int"))
                .Returns(new IntRouteConstraint());

            var policy = new UriBuilderContextPooledObjectPolicy(new UrlTestEncoder());
            var pool = new DefaultObjectPool<UriBuildingContext>(policy);

            var route = new AttributeRoute(
                handler,
                actionDescriptorProvider,
                constraintResolver.Object,
                pool,
                new UrlTestEncoder(),
                NullLoggerFactory.Instance);

            return route;
        }
示例#6
0
 public HateoasGenresControllerBase(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     _routes = actionDescriptorCollectionProvider.ActionDescriptors.Items;
 }
 public RouteAnalyzer(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
示例#8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="VersionedODataModelBuilder"/> class.
 /// </summary>
 /// <param name="actionDescriptorCollectionProvider">The <see cref="IActionDescriptorCollectionProvider "/> used to discover OData routes.</param>
 /// <param name="options">The <see cref="ApiVersioningOptions">options</see> associated with the action selector.</param>
 public VersionedODataModelBuilder(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider, IOptions <ApiVersioningOptions> options)
     : this(actionDescriptorCollectionProvider, options, Empty <IModelConfiguration>())
 {
 }
 public MvcControllerDiscovery(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
示例#10
0
 public ArticlePageModel(IEpiServerInitialize epi, IActionDescriptorCollectionProvider actionDescriptorCollectionProvider) : base(epi, actionDescriptorCollectionProvider)
 {
 }
示例#11
0
 public RoutesController(IActionDescriptorCollectionProvider provider)
 {
     _provider = provider;
 }
示例#12
0
 public RoutesController(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     this._actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
示例#13
0
 protected private abstract ActionEndpointDataSourceBase CreateDataSource(IActionDescriptorCollectionProvider actions, ActionEndpointFactory endpointFactory);
示例#14
0
 public RecogController(IActionDescriptorCollectionProvider provider,
                        ILoggerFactory logger)
 {
     _provider = provider;
     _logger   = logger.CreateLogger("OrderController");
 }
        private static Resource CreateResource(Type type, object value, HateoasOptions options, IActionDescriptorCollectionProvider actionDescriptorProvider, IUrlHelper urlHelper)
        {
            var resourceOptions = options.Requirements.Where(r => r.ResourceType == type);
            var isEnumerable    = type.GetInterfaces().Contains(typeof(IEnumerable));

            var resource = default(Resource);

            if (isEnumerable)
            {
                resource = new ListItemResource(value);
            }
            else
            {
                resource = new ObjectResource(value);
            }
            foreach (var option in resourceOptions)
            {
                var route       = actionDescriptorProvider.ActionDescriptors.Items.FirstOrDefault(i => i.AttributeRouteInfo.Name == option.Name);
                var method      = route.ActionConstraints.OfType <HttpMethodActionConstraint>().First().HttpMethods.First();
                var routeValues = default(object);
                if (!isEnumerable)
                {
                    routeValues = option.RouteValues(value);
                }
                var url = urlHelper.Link(option.Name, routeValues).ToLower();
                resource.Links.Add(new Link(option.Name, url, method));
            }
            return(resource);
        }
示例#16
0
 public ControllerService(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
            internal static Lazy <IReadOnlyList <ApiVersionDescription> > Create(DefaultApiVersionDescriptionProvider apiVersionDescriptionProvider, IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
            {
                Contract.Requires(apiVersionDescriptionProvider != null);
                Contract.Requires(actionDescriptorCollectionProvider != null);
                Contract.Ensures(Contract.Result <Lazy <IReadOnlyList <ApiVersionDescription> > >() != null);

                var descriptions = new LazyApiVersionDescriptions(apiVersionDescriptionProvider, actionDescriptorCollectionProvider);

                return(new Lazy <IReadOnlyList <ApiVersionDescription> >(descriptions.EnumerateApiVersions));
            }
            LazyApiVersionDescriptions(DefaultApiVersionDescriptionProvider apiVersionDescriptionProvider, IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
            {
                Contract.Requires(apiVersionDescriptionProvider != null);
                Contract.Requires(actionDescriptorCollectionProvider != null);

                this.apiVersionDescriptionProvider      = apiVersionDescriptionProvider;
                this.actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
            }
 public MetadataService(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider,
                        IServiceCollection serviceCollection)
 {
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
     _serviceCollection = serviceCollection;
 }
        private async Task <IEnumerable <AreaInfo> > GetAreaInfosAsync(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider, PageLoader pageLoader, LinkGenerator linkGenerator)
        {
            //根,从area开始
            var result = new List <AreaInfo>();

            //遍历区域
            foreach (var area in actionDescriptorCollectionProvider.ActionDescriptors.Items.GroupBy(item => item.RouteValues["area"]))
            {
                var areaInfo = new AreaInfo {
                    Name = area.Key
                };
                result.Add(areaInfo);

                //遍历控制器
                foreach (var controllerActions in area.OfType <ControllerActionDescriptor>().GroupBy(c => c.ControllerTypeInfo))
                {
                    //跳过重复控制器,不知道为什么,里面有些重复项目
                    if (areaInfo.Controllers.Any(c => c.TypeFullName == controllerActions.Key.FullName))
                    {
                        continue;
                    }

                    var conInfo = new AreaInfo.ControllerInfo
                    {
                        Name         = controllerActions.First().ControllerName,
                        TypeFullName = controllerActions.Key.FullName,
                        Description  = (controllerActions.Key.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)
                                       ?.Description,
                        Area = controllerActions.First().RouteValues["area"],
                    };
                    areaInfo.Controllers.Add(conInfo);

                    //遍历动作
                    foreach (var action in controllerActions)
                    {
                        var act = new AreaInfo.ControllerInfo.ActionInfo
                        {
                            Name                  = action.MethodInfo.Name,
                            ActionName            = action.ActionName,
                            HandlerIdentification = (action.MethodInfo.GetCustomAttribute(typeof(RequestHandlerIdentificationAttribute)) as RequestHandlerIdentificationAttribute)
                                                    ?.UniqueKey,
                            Signature   = action.MethodInfo.ToString(),
                            Description = (action.MethodInfo.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)
                                          ?.Description,
                            Url = linkGenerator.GetPathByAction(action.ActionName, conInfo.Name, new { area = conInfo.Area }),
                            HttpMethodLimits = action.ActionConstraints?.OfType <HttpMethodActionConstraint>().FirstOrDefault()?.HttpMethods.ToList(),
                            MethodInfo       = action.MethodInfo,
                            ActionDescriptor = action
                        };
                        conInfo.Actions.Add(act);
                    }
                }

                //遍历Razor Page
                foreach (var pageActionDescriptor in area.OfType <PageActionDescriptor>())
                {
                    //载入Razor Page,会从程序集加载或编译page文件并缓存
                    var page = await pageLoader.LoadAsync(pageActionDescriptor);

                    //也是剔除重复
                    if (areaInfo.Pages.Any(p => p.TypeFullName == page.HandlerTypeInfo.FullName))
                    {
                        continue;
                    }

                    var pageInfo = new AreaInfo.PageInfo
                    {
                        Name         = page.DisplayName,
                        Area         = page.AreaName,
                        TypeFullName = page.HandlerTypeInfo.FullName,
                        Description  = (page.HandlerTypeInfo.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)
                                       ?.Description
                    };

                    foreach (var handlerMethod in page.HandlerMethods)
                    {
                        pageInfo.PageHandlers.Add(new AreaInfo.PageInfo.PageHandlerInfo
                        {
                            HttpMethod            = handlerMethod.HttpMethod,
                            Name                  = handlerMethod.Name,
                            HandlerIdentification = (handlerMethod.MethodInfo.GetCustomAttribute(typeof(RequestHandlerIdentificationAttribute)) as RequestHandlerIdentificationAttribute)
                                                    ?.UniqueKey,
                            Signature   = handlerMethod.MethodInfo.ToString(),
                            Description = (handlerMethod.MethodInfo.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)
                                          ?.Description,
                            Url              = linkGenerator.GetPathByPage(page.DisplayName, handlerMethod.Name, new { area = page.AreaName }),
                            MethodInfo       = handlerMethod.MethodInfo,
                            ActionDescriptor = page
                        });
                    }
                    areaInfo.Pages.Add(pageInfo);
                }
            }

            return(result);
        }
示例#21
0
 /// <summary>
 /// Returns all endpoint specification for current microservice
 /// </summary>
 /// <param name="actionDescriptorCollectionProvider"></param>
 public MicroserviceController(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
示例#22
0
 public DiseaseController(ApplicationDbContext context,
                          IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     _databaseContext = context;
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
 public RoutesController(IRouteRepository routeRepository, IMapper mapper, IActionDescriptorCollectionProvider actionDescriptorCollectionProvider) : base(actionDescriptorCollectionProvider)
 {
     _routeRepository = routeRepository;
     _mapper          = mapper;
 }
 public RoutesDebugController(IActionDescriptorCollectionProvider provider) => _provider = provider;
示例#25
0
 public UsersController(AlpsContext context, IActionDescriptorCollectionProvider actionProvider)
 {
     _context        = context;
     _actionProvider = actionProvider;
 }
示例#26
0
 protected ActionEndpointDataSourceBase(IActionDescriptorCollectionProvider provider)
 {
     Conventions        = new List <Action <EndpointBuilder> >();
     _endpointsAccessor = new Lazy <IReadOnlyList <Endpoint> >(() => CreateEndpoints(provider.ActionDescriptors, Conventions));
 }
 public HomeController(IDatabase database, IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     _database = database;
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
示例#28
0
 /// <summary>
 /// Constructor with IActionDescriptorCollectionProvider DI
 /// </summary>
 /// <param name="actionDescriptorCollectionProvider"></param>
 public HateoasFilter(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
示例#29
0
 public DiscoverController(IActionDescriptorCollectionProvider actionDescriptor)
 {
     this.actionDescriptor = actionDescriptor;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="AttributeRoutingConvention"/> class.
        /// </summary>
        /// <param name="pathTemplateHandler"></param>
        /// <param name="actionCollectionProvider"></param>
        public AttributeRoutingConvention(IODataPathTemplateHandler pathTemplateHandler, IActionDescriptorCollectionProvider actionCollectionProvider)
        {
            if (pathTemplateHandler == null)
            {
                throw Error.ArgumentNull("pathTemplateHandler");
            }

            if (actionCollectionProvider == null)
            {
                throw Error.ArgumentNull("actionCollectionProvider");
            }

            ODataPathTemplateHandler           = pathTemplateHandler;
            ActionDescriptorCollectionProvider = actionCollectionProvider;
        }
示例#31
0
 public EpiPageModel(IEpiServerInitialize epi, IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     contentLoader = epi.GetInstance <IContentLoader>();
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
     //CurrentPage = pages.FirstOrDefault(x => x.URLSegment == )
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ControllerActionDescriptorCache"/> class.
 /// </summary>
 /// <param name="provider">Action descriptors collection provider.</param>
 public ControllerActionDescriptorCache(IActionDescriptorCollectionProvider provider)
 {
     this.PrepareCache(provider);
 }
 public RoutesModel(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     this._actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
示例#34
0
 public DataBaseController(ITJobsAppContext context,
                           IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     _databaseContext = context;
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
    public ActionEndpointDataSourceBase(IActionDescriptorCollectionProvider actions)
    {
        _actions = actions;

        Conventions = new List <Action <EndpointBuilder> >();
    }
 /// <summary>
 /// Creates a new <see cref="ActionSelectorDecisionTreeProvider"/>.
 /// </summary>
 /// <param name="actionDescriptorCollectionProvider">
 /// The <see cref="IActionDescriptorCollectionProvider"/>.
 /// </param>
 public ActionSelectorDecisionTreeProvider(
     IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
 {
     _actionDescriptorCollectionProvider = actionDescriptorCollectionProvider;
 }
示例#37
0
        public DefaultPageLoaderTest()
        {
            var actionDescriptors = new ActionDescriptorCollection(Array.Empty <ActionDescriptor>(), 1);

            ActionDescriptorCollectionProvider = Mock.Of <IActionDescriptorCollectionProvider>(v => v.ActionDescriptors == actionDescriptors);
        }