private static IActionResultTestBuilder <MethodResult> GetBuilder <TController>(
            IControllerRouteTestBuilder <TController> builder,
            Func <TController> construction,
            Action <IWhichControllerInstanceBuilder <TController> > controllerInstanceBuilder)
            where TController : class
        {
            var actualBuilder = (ControllerRouteTestBuilder <TController>)builder;

            var routeContext = actualBuilder.RouteContext;
            var actionCall   = actualBuilder.ActionCallExpression;

            var whichControllerInstanceBuilder = new WhichControllerInstanceBuilder <TController>(new ControllerTestContext
            {
                HttpContext = routeContext.HttpContext,
                RouteData   = routeContext.RouteData,
                ComponentConstructionDelegate = construction,
                MethodCall = actionCall
            });

            controllerInstanceBuilder?.Invoke(whichControllerInstanceBuilder);

            return(whichControllerInstanceBuilder);
        }
 public static IWhichControllerInstanceBuilder <TController> Which <TController>(
     this IControllerRouteTestBuilder <TController> builder,
     Func <TController> construction)
     where TController : class
 => (IWhichControllerInstanceBuilder <TController>)GetBuilder(builder, construction, null);
 /// <summary>
 /// Allows the route test to continue the assertion chain on the matched controller action.
 /// </summary>
 /// <typeparam name="TController">Class representing ASP.NET Core MVC controller.</typeparam>
 /// <param name="builder">Instance of <see cref="IControllerRouteTestBuilder{TController}"/> type.</param>
 /// <param name="controllerInstanceBuilder">Builder for creating the controller instance.</param>
 /// <returns>Test builder of <see cref="IActionResultTestBuilder{TActionResult}"/> type.</returns>
 public static IActionResultTestBuilder <MethodResult> Which <TController>(
     this IControllerRouteTestBuilder <TController> builder,
     Action <IWhichControllerInstanceBuilder <TController> > controllerInstanceBuilder)
     where TController : class
 => GetBuilder(builder, () => null, controllerInstanceBuilder);
 public static IWhichControllerInstanceBuilder <TController> Which <TController>(
     this IControllerRouteTestBuilder <TController> builder,
     TController controller)
     where TController : class
 => builder.Which(() => controller);