| File: Discovery\ComponentCollectionBuilder.cs | Web Access |
| Project: src\aspnetcore\src\Components\Endpoints\src\Microsoft.AspNetCore.Components.Endpoints.csproj (Microsoft.AspNetCore.Components.Endpoints) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace Microsoft.AspNetCore.Components.Discovery; /// <summary> /// Represents the list of components defined in a <see cref="ComponentApplicationBuilder"/> /// before the configuration has finalized. /// </summary> internal class ComponentCollectionBuilder { private readonly Dictionary<string, IReadOnlyList<ComponentBuilder>> _components = new(); internal void Combine(ComponentCollectionBuilder components) { foreach (var (assembly, pageCollection) in components._components) { if (!_components.ContainsKey(assembly)) { _components.Add(assembly, pageCollection); } } } internal void Exclude(ComponentCollectionBuilder components) { foreach (var (assembly, _) in components._components) { if (_components.ContainsKey(assembly)) { _components.Remove(assembly); } } } internal void Remove(string name) { _components.Remove(name); } internal void AddFromLibraryInfo(string assemblyName, IReadOnlyList<ComponentBuilder> components) { _components.Add(assemblyName, components); } internal ComponentInfo[] ToComponentCollection() { var totalCount = 0; foreach (var value in _components.Values) { totalCount += value.Count; } if (totalCount == 0) { return Array.Empty<ComponentInfo>(); } var current = 0; var result = new ComponentInfo[totalCount]; foreach (var (_, components) in _components) { for (var i = 0; i < components.Count; i++, current++) { var componentType = components[i]; result[current] = componentType.Build(); } } return result; } }