コード例 #1
0
        public DefaultRouteMap(IActionContextAccessor contextAccessor, ILogger <DefaultRouteMap> logger, IAssemblyLoader assemblyLoader)
        {
            if (assemblyLoader == null)
            {
                throw new ArgumentNullException(nameof(assemblyLoader));
            }

            this.contextAccessor = contextAccessor;
            this.logger          = logger;

            var assemblies = assemblyLoader.GetAssemblies();

            foreach (var asm in assemblies)
            {
                var controllers = asm.GetTypes()
                                  .Where(type => typeof(ControllerBase).IsAssignableFrom(type));

                var controllerMethods = controllers.SelectMany(c => c.GetMethods(BindingFlags.Public | BindingFlags.Instance)
                                                               .Where(m => m.IsDefined(typeof(HttpMethodAttribute)))
                                                               .SelectMany(m => m.GetCustomAttributes <HttpMethodAttribute>(), (m, attr) => new
                {
                    Controller    = c,
                    Method        = m,
                    HttpAttribute = attr
                }));

                foreach (var attr in controllerMethods.Where(a => !String.IsNullOrWhiteSpace(a.HttpAttribute.Name)))
                {
                    var method = ParseMethod(attr.HttpAttribute.HttpMethods);
                    RouteMap[attr.HttpAttribute.Name] = new RouteInfo(attr.HttpAttribute.Name, method, new ReflectionControllerMethodInfo(attr.Method));
                }
            }
        }
 private void AddAssemblies(List <string> addedAssemblyNames, List <Assembly> assemblies, IAssemblyLoader loader)
 {
     foreach (Assembly assembly in loader.GetAssemblies())
     {
         if (!addedAssemblyNames.Contains(assembly.FullName))
         {
             assemblies.Add(assembly);
             addedAssemblyNames.Add(assembly.FullName);
         }
     }
 }
コード例 #3
0
 private void AddAssemblies(List <string> addedAssemblyNames, List <Assembly> assemblies, IAssemblyLoader loader)
 {
     foreach (Assembly assembly in loader.GetAssemblies())
     {
         StringMatch match = new StringMatch(RestrictToPattern, SkipPattern);
         if (match.Matches(assembly.FullName))
         {
             if (!addedAssemblyNames.Contains(assembly.FullName))
             {
                 assemblies.Add(assembly);
                 addedAssemblyNames.Add(assembly.FullName);
             }
         }
     }
 }
コード例 #4
0
 protected override IEnumerable <Assembly> GetAssemblies()
 {
     return(_assemblyLoader.GetAssemblies());
 }
コード例 #5
0
        private static void UpdateSerializationSystems()
        {
            if (!_isDirty)
            {
                return;
            }

            _assemblyLoader.OnAssemblyLoaded -= SetDirty;

            Dictionary <Type, List <Pair> > candidates = new Dictionary <Type, List <Pair> >();

            var searchSet = new Queue <Assembly>(_assemblyLoader.GetAssemblies());
            var foundSet  = new HashSet <Assembly>();

            Action <Assembly> onAssemblyLoaded = a =>
            {
                if (foundSet.Contains(a))
                {
                    return;
                }

                searchSet.Enqueue(a);
            };

            _assemblyLoader.OnAssemblyLoaded += onAssemblyLoaded;

            while (searchSet.Count > 0)
            {
                var ass = searchSet.Dequeue();
                foundSet.Add(ass);

                foreach (var type in TypeTools.GetAllTypes(ass).Where(t => !(t.IsAbstract() || t.IsInterface())))
                {
                    var key = _validTypes.FirstOrDefault(i => TypeTools.IsAssignableFrom(i, type));
                    if (key == null)
                    {
                        continue;
                    }

                    var att = type.GetTypeAttributes <DefaultSerializationSystemAttribute>(false).FirstOrDefault();
                    if (att == null)
                    {
                        continue;
                    }

                    List <Pair> set;
                    if (!candidates.TryGetValue(key, out set))
                    {
                        set             = new List <Pair>();
                        candidates[key] = set;
                    }

                    set.Add(Tuples.Create(att, type));
                }
            }

            _assemblyLoader.OnAssemblyLoaded -= onAssemblyLoaded;

            RecalcTypeTrees(_surrogateSelector, candidates);
            RecalcTypeTrees(_formatterSelector, candidates);

            _assemblyLoader.OnAssemblyLoaded += SetDirty;
            _isDirty = false;
        }