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); } } }
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); } } } }
protected override IEnumerable <Assembly> GetAssemblies() { return(_assemblyLoader.GetAssemblies()); }
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; }