Пример #1
0
        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
                                     ));
 }
Пример #4
0
 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)));
 }