public void AutoScan() { var cormo = typeof(IComponentManager).Assembly; var assemblyName = cormo.GetName(); var assemblies = WhereReferencesRecursive(AppDomain.CurrentDomain.GetAssemblies(), assemblyName) .Union(new[] { cormo }).ToArray(); var types = (from assembly in assemblies.AsParallel() from type in assembly.GetLoadableTypes() where type.IsVisible && type.IsClass && !type.IsPrimitive select type).ToArray(); var componentTypes = types.AsParallel().Where(TypeUtils.IsComponent).ToArray(); var assemblyConfigs = (from assembly in assemblies.AsParallel() from import in assembly.GetAttributesRecursive <ImportAttribute>() from type in import.Types select type).ToArray(); AddTypes(componentTypes); var configs = GetConfigs(_environment.Components, assemblyConfigs); foreach (var c in configs) { _environment.AddConfiguration(c); } }
public void AutoScan() { var cormo = typeof(IComponentManager).Assembly; var assemblyName = cormo.GetName(); var assemblies = WhereReferencesRecursive(AppDomain.CurrentDomain.GetAssemblies(), assemblyName).ToArray(); var types = (from assembly in assemblies.AsParallel() from type in assembly.GetLoadableTypes() where type.IsClass && !type.IsPrimitive select type) .AsEnumerable().Union(BuiltInTypes) .ToArray(); var extensions = types.Where(typeof(IExtension).IsAssignableFrom).ToArray(); types = types.Except(extensions).ToArray(); Container.Instance.Initialize(_manager); AddContexts(); RegisterExtensions(extensions); var componentTypes = types.AsParallel().Where(TypeUtils.IsComponent).ToArray(); var assemblyConfigs = (from assembly in assemblies.AsParallel() from import in assembly.GetAttributesRecursive <ImportAttribute>() from type in import.Types select type).ToArray(); AddTypes(componentTypes); var configs = GetConfigs(_environment.Components, assemblyConfigs); foreach (var c in configs) { _environment.AddConfiguration(c); } }