public ControllerMapper(ITypeFinder typeFinder, IDefinitionManager definitionManager) { IList <ControlsAttribute> controllerDefinitions = FindControllers(typeFinder); foreach (ItemDefinition id in definitionManager.GetDefinitions()) { IAdapterDescriptor controllerDefinition = GetControllerFor(id, controllerDefinitions); if (controllerDefinition != null) { ControllerMap[id.ItemType] = controllerDefinition.ControllerName; // interacting with static context is tricky, here I made the assumtion that the last // finder is the most relevat and takes the place of previous ones, this makes a few // tests pass and doesn't seem to be called in production foreach (var finder in PathDictionary.GetFinders(id.ItemType).Where(f => f is ActionResolver)) { PathDictionary.RemoveFinder(id.ItemType, finder); } // Use MVC's ReflectedControllerDescriptor to find all actions on the Controller var methods = new ReflectedControllerDescriptor(controllerDefinition.AdapterType) .GetCanonicalActions() .Select(m => m.ActionName).ToArray(); var actionResolver = new ActionResolver(this, methods); _controllerActionMap[controllerDefinition.ControllerName] = methods; PathDictionary.PrependFinder(id.ItemType, actionResolver); } } }
public void MapperDoesNotMapProperties() { new ControllerMapper(typeFinder, definitions); var actionResolver = PathDictionary.GetFinders(typeof(RegularPage)).FirstOrDefault() as ActionResolver; Assert.That(actionResolver, Is.Not.Null); Assert.That(actionResolver.Methods.Length, Is.EqualTo(1)); }