public void GetTableControllerNames_ReturnsCorrectControllers()
        {
            // Arrange
            var typeList = new[]
            {
                typeof(MoviesController),
                typeof(ZetaController),
                typeof(TestTableController),
                typeof(ApiController),
                typeof(CustomController),
                typeof(DerivedMoviesController)
            };

            HttpConfiguration config = new HttpConfiguration();
            IAssembliesResolver assemblyResolver = config.Services.GetAssembliesResolver();
            Mock<IHttpControllerTypeResolver> typeResolverMock = new Mock<IHttpControllerTypeResolver>();
            typeResolverMock.Setup(m => m.GetControllerTypes(assemblyResolver)).Returns(typeList);

            config.Services.Replace(typeof(IHttpControllerTypeResolver), typeResolverMock.Object);

            // Act
            var names = config.GetTableControllerNames();

            // Assert
            Assert.Equal(new[] { "Movies", "TestTable", "DerivedMovies" }, names);
        }
        /// <summary>
        /// </summary>
        /// <param name="config">HttpConfiguration</param>
        public void Initialize(HttpConfiguration config)
        {
            HashSet<string> tableControllerNames = config.GetTableControllerNames();
            SetRouteConstraint<string> tableControllerConstraint = new SetRouteConstraint<string>(tableControllerNames, matchOnExcluded: false);

            HttpRouteCollectionExtensions.MapHttpRoute(
                config.Routes,
                name: TablesRouteName,
                routeTemplate: "tables/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional },
                constraints: new { controller = tableControllerConstraint });
        }
        /// <summary>
        /// </summary>
        /// <param name="config">HttpConfiguration</param>
        public void Initialize(HttpConfiguration config)
        {
            HashSet<string> tableControllerNames = config.GetTableControllerNames();
            SetRouteConstraint<string> tableControllerConstraint = new SetRouteConstraint<string>(tableControllerNames, matchOnExcluded: false);

            // register all TableControllers as exclusions so they do not map to /api
            MobileAppConfiguration mobileAppConfig = config.GetMobileAppConfiguration();
            foreach (string controllerName in tableControllerNames)
            {
                mobileAppConfig.AddBaseRouteExclusion(controllerName);
            }

            HttpRouteCollectionExtensions.MapHttpRoute(
                config.Routes,
                name: TablesRouteName,
                routeTemplate: "tables/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional },
                constraints: new { controller = tableControllerConstraint });
        }