Пример #1
0
        public void should_create_controllers_by_its_name_case_insensitively()
        {
            var            controllerTypes = new[] { typeof(ControllerWithPublicAction) };
            HttpController controller      = new DefaultControllerFactory().CreateController(
                "controllerwithpublicaction",
                controllerTypes,
                new DefaultDependencyResolver(controllerTypes));

            Assert.Equal(typeof(ControllerWithPublicAction), controller.GetType());
        }
Пример #2
0
        /// <summary>
        /// Initializes the controller type cache of the default controller factory.
        /// </summary>
        private void InitializeControllerTypeCache()
        {
            DefaultControllerFactory defaultControllerFactory =
                System.Web.Mvc.DependencyResolver.Current.GetService <IControllerFactory>() as DefaultControllerFactory ??
                (ControllerBuilder.Current.GetControllerFactory() as DefaultControllerFactory ?? new DefaultControllerFactory());

            MethodInfo getControllerTypesMethod = defaultControllerFactory.GetType().GetMethod("GetControllerTypes", BindingFlags.Instance | BindingFlags.NonPublic);

            getControllerTypesMethod.Invoke(defaultControllerFactory, null);
        }
Пример #3
0
        public void should_create_controllers()
        {
            var            controllerTypes = new [] { typeof(ControllerWithPublicAction) };
            HttpController controller      = new DefaultControllerFactory().CreateController(
                "ControllerWithPublicAction",
                controllerTypes,
                new DefaultDependencyResolver(controllerTypes));

            Assert.Equal(typeof(ControllerWithPublicAction), controller.GetType());
        }
Пример #4
0
        private static void InjectKnownControllerTypes(DefaultControllerFactory controllerFactory,
                                                       params Type[] controllerTypes)
        {
            // D'oh!!! Hey MVC people, how is this testable? ;)

            // locate the appropriate reflection member info
            var controllerTypeCacheProperty = controllerFactory.GetType()
                                              .GetProperty("ControllerTypeCache", BindingFlags.Instance | BindingFlags.NonPublic);
            var cacheField = controllerTypeCacheProperty.PropertyType.GetField("_cache",
                                                                               BindingFlags.NonPublic |
                                                                               BindingFlags.Instance);

            // turn the array into the correct collection
            var cache = controllerTypes
                        .GroupBy(t => t.Name.Substring(0, t.Name.Length - "Controller".Length), StringComparer.OrdinalIgnoreCase)
                        .ToDictionary(g => g.Key,
                                      g => g.ToLookup(t => t.Namespace ?? string.Empty, StringComparer.OrdinalIgnoreCase),
                                      StringComparer.OrdinalIgnoreCase);

            // execute: controllerFactory.ControllerTypeCache._cache = cache;
            cacheField.SetValue(
                controllerTypeCacheProperty.GetValue(controllerFactory, null),
                cache);
        }