private static void LoadRoutes(Type controllerType) { if (!LoadedControllerRoutes.Contains(controllerType)) { lock (SyncRoot) { if (!LoadedControllerRoutes.Contains(controllerType)) { foreach (var prop in controllerType.GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(p => p.PropertyType == typeof(IController))) { Routes.Add(new ControllerRoute(controllerType, prop.Name), GenerateRouteFunction(prop.GetMethod)); } // Indexers var method = controllerType.GetMethods().SingleOrDefault(m => Attribute.IsDefined(m, typeof(IndexerAttribute))); if (method != null) { IndexerRoutes.Add(controllerType, ClassRouter.CreateIndexerFunction <IController>(controllerType, method)); } LoadedControllerRoutes.Add(controllerType); } } } }