private ControllerActionDescriptor InvokeActionSelector(RouteContext context) { var actionDescriptorProvider = GetActionDescriptorProvider(); var serviceContainer = new ServiceCollection(); var list = new List<IActionDescriptorProvider>() { actionDescriptorProvider, }; serviceContainer.AddSingleton(typeof(IEnumerable<IActionDescriptorProvider>), list); var actionDescriptorCollectionProvider = new ActionDescriptorCollectionProvider( serviceContainer.BuildServiceProvider()); var decisionTreeProvider = new ActionSelectorDecisionTreeProvider(actionDescriptorCollectionProvider); var actionConstraintProviders = new[] { new DefaultActionConstraintProvider(), }; var actionSelector = new ActionSelector( decisionTreeProvider, GetActionConstraintCache(actionConstraintProviders), NullLoggerFactory.Instance); var candidates = actionSelector.SelectCandidates(context); return (ControllerActionDescriptor)actionSelector.SelectBestCandidate(context, candidates); }
private static ActionSelector CreateSelector(IReadOnlyList<ActionDescriptor> actions, ILoggerFactory loggerFactory = null) { loggerFactory = loggerFactory ?? NullLoggerFactory.Instance; var actionProvider = new Mock<IActionDescriptorCollectionProvider>(MockBehavior.Strict); actionProvider .Setup(p => p.ActionDescriptors).Returns(new ActionDescriptorCollection(actions, 0)); var decisionTreeProvider = new ActionSelectorDecisionTreeProvider(actionProvider.Object); var actionConstraintProviders = new IActionConstraintProvider[] { new DefaultActionConstraintProvider(), new BooleanConstraintProvider(), }; return new ActionSelector( decisionTreeProvider, GetActionConstraintCache(actionConstraintProviders), loggerFactory); }