private string FindArea(string targetNamespace) { var query = _areaNamespaces.SelectMany(kv => kv.Value.Select(v => new { area = kv.Key, areaNamespace = v })); return(query.Where(ns => AreaNamespace.IsNamespaceMatch(ns.areaNamespace, targetNamespace)) .Select(ns => ns.area) .FirstOrDefault()); }
private ConcurrentDictionary <AreaController, HttpControllerDescriptor> InitializeControllerInfoCache() { var result = new ConcurrentDictionary <AreaController, HttpControllerDescriptor>(); var duplicateControllers = new HashSet <AreaController>(); Dictionary <string, ILookup <string, Type> > controllerTypeGroups = _controllerTypeCache.Cache; var routeNamespaces = _configuration.Routes.SelectMany(r => GetNamespaces(r).Select(ns => new { Route = r, Namespace = ns })); foreach (KeyValuePair <string, ILookup <string, Type> > controllerTypeGroup in controllerTypeGroups) { string controllerName = controllerTypeGroup.Key; foreach (IGrouping <string, Type> controllerTypesGroupedByNs in controllerTypeGroup.Value) { foreach (Type controllerType in controllerTypesGroupedByNs) { var areaNames = routeNamespaces.Where(ns => AreaNamespace.IsNamespaceMatch(ns.Namespace, controllerType.Namespace)).Select(ns => GetAreaName(ns.Route)).ToList(); //If no area matches, register it in root if (!areaNames.Any()) { areaNames.Add(null); } foreach (var areaName in areaNames) { var key = new AreaController(areaName, controllerName); if (result.Keys.Contains(key)) { duplicateControllers.Add(key); break; } else { result.TryAdd(key, new HttpControllerDescriptor(_configuration, controllerName, controllerType)); } } } } } foreach (var duplicateController in duplicateControllers) { HttpControllerDescriptor descriptor; result.TryRemove(duplicateController, out descriptor); } return(result); }
private IDependencyResolver GetInnerDependencyResolver(Type serviceType) { return(_namespaceCache.GetOrAdd(serviceType.Namespace, serviceNameSpace => _areaDependencyResolvers.FirstOrDefault(kv => AreaNamespace.IsNamespaceMatch(kv.Key, serviceType.Namespace)).Value ?? _baseDependencyResolver )); }
private static IEnumerable <string> GetControllerNames(ICollection <string> namespaces) { return(controllerTypes.Value.Where(t => namespaces.Any(n => AreaNamespace.IsNamespaceMatch(n, t.Key))) .SelectMany(g => g) .Select(t => t.Name.Substring(0, t.Name.Length - DefaultHttpControllerSelector.ControllerSuffix.Length))); }