Skip to content

Commit 09eb756

Browse files
committed
More feedback
1 parent 86e0298 commit 09eb756

7 files changed

+72
-63
lines changed

src/Components/Endpoints/src/Discovery/ComponentApplicationBuilder.cs

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,33 @@ public class ComponentApplicationBuilder
2424
/// <exception cref="InvalidOperationException">When the assembly has already been added
2525
/// to this component application builder.
2626
/// </exception>
27-
public void AddLibrary(AssemblyComponentLibraryDescriptor libraryBuilder)
27+
public void AddComponentAssembly(AssemblyComponentLibraryDescriptor libraryBuilder)
2828
{
2929
if (_assemblies.Contains(libraryBuilder.AssemblyName))
3030
{
3131
throw new InvalidOperationException("Assembly already defined.");
3232
}
3333
_assemblies.Add(libraryBuilder.AssemblyName);
34-
Pages.AddFromLibraryInfo(libraryBuilder.AssemblyName, libraryBuilder.Pages);
35-
Components.AddFromLibraryInfo(libraryBuilder.AssemblyName, libraryBuilder.Components);
34+
Pages.Add(libraryBuilder.AssemblyName, libraryBuilder.Pages);
35+
Components.Add(libraryBuilder.AssemblyName, libraryBuilder.Components);
36+
}
37+
38+
/// <summary>
39+
/// Removes the given <paramref name="assembly"/> and the associated definitions from
40+
/// the current <see cref="ComponentApplicationBuilder"/>.
41+
/// </summary>
42+
/// <param name="assembly">The assembly name.</param>
43+
public void RemoveComponentAssembly(Assembly assembly)
44+
{
45+
var assemblyName = assembly.GetName().FullName;
46+
RemoveComponentAssembly(assemblyName);
47+
}
48+
49+
internal void RemoveComponentAssembly(string assemblyName)
50+
{
51+
_assemblies.Remove(assemblyName);
52+
Pages.Remove(assemblyName);
53+
Components.Remove(assemblyName);
3654
}
3755

3856
/// <summary>
@@ -80,18 +98,6 @@ public void Exclude(ComponentApplicationBuilder builder)
8098
Components.Exclude(builder.Components);
8199
}
82100

83-
/// <summary>
84-
/// Removes the given <paramref name="assembly"/> and the associated definitions from
85-
/// the current <see cref="ComponentApplicationBuilder"/>.
86-
/// </summary>
87-
/// <param name="assembly">The assembly name.</param>
88-
public void RemoveLibrary(string assembly)
89-
{
90-
_assemblies.Remove(assembly);
91-
Pages.RemoveFromAssembly(assembly);
92-
Components.Remove(assembly);
93-
}
94-
95101
/// <summary>
96102
/// Gets the <see cref="ComponentApplicationBuilder"/> for the given <typeparamref name="TComponent"/>.
97103
/// </summary>

src/Components/Endpoints/src/Discovery/ComponentCollectionBuilder.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,44 +9,44 @@ namespace Microsoft.AspNetCore.Components.Discovery;
99
/// </summary>
1010
internal class ComponentCollectionBuilder
1111
{
12-
private readonly Dictionary<string, IReadOnlyList<ComponentBuilder>> _components = new();
12+
private readonly Dictionary<string, IReadOnlyList<ComponentBuilder>> _componentsByAssemblyName = new();
1313

1414
internal void Combine(ComponentCollectionBuilder components)
1515
{
16-
foreach (var (assembly, pageCollection) in components._components)
16+
foreach (var (assembly, pageCollection) in components._componentsByAssemblyName)
1717
{
18-
if (!_components.ContainsKey(assembly))
18+
if (!_componentsByAssemblyName.ContainsKey(assembly))
1919
{
20-
_components.Add(assembly, pageCollection);
20+
_componentsByAssemblyName.Add(assembly, pageCollection);
2121
}
2222
}
2323
}
2424

2525
internal void Exclude(ComponentCollectionBuilder components)
2626
{
27-
foreach (var (assembly, _) in components._components)
27+
foreach (var (assembly, _) in components._componentsByAssemblyName)
2828
{
29-
if (_components.ContainsKey(assembly))
29+
if (_componentsByAssemblyName.ContainsKey(assembly))
3030
{
31-
_components.Remove(assembly);
31+
_componentsByAssemblyName.Remove(assembly);
3232
}
3333
}
3434
}
3535

3636
internal void Remove(string name)
3737
{
38-
_components.Remove(name);
38+
_componentsByAssemblyName.Remove(name);
3939
}
4040

41-
internal void AddFromLibraryInfo(string assemblyName, IReadOnlyList<ComponentBuilder> components)
41+
internal void Add(string assemblyName, IReadOnlyList<ComponentBuilder> components)
4242
{
43-
_components.Add(assemblyName, components);
43+
_componentsByAssemblyName.Add(assemblyName, components);
4444
}
4545

4646
internal ComponentInfo[] ToComponentCollection()
4747
{
4848
var totalCount = 0;
49-
foreach (var value in _components.Values)
49+
foreach (var value in _componentsByAssemblyName.Values)
5050
{
5151
totalCount += value.Count;
5252
}
@@ -58,7 +58,7 @@ internal ComponentInfo[] ToComponentCollection()
5858

5959
var current = 0;
6060
var result = new ComponentInfo[totalCount];
61-
foreach (var (_, components) in _components)
61+
foreach (var (_, components) in _componentsByAssemblyName)
6262
{
6363
for (var i = 0; i < components.Count; i++, current++)
6464
{

src/Components/Endpoints/src/Discovery/DefaultRazorComponentApplication.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public ComponentApplicationBuilder GetBuilder()
3939
// so that users can decide the list of things that get considered as endpoints.
4040
var libraryName = typeof(TComponent).Assembly.FullName!;
4141
var (pages, components) = CreatePageRouteCollection(libraryName);
42-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(libraryName, pages, components));
42+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(libraryName, pages, components));
4343
return builder;
4444

4545
static (IReadOnlyList<PageComponentBuilder>, IReadOnlyList<ComponentBuilder>) CreatePageRouteCollection(string name)

src/Components/Endpoints/src/Discovery/PageCollectionBuilder.cs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,44 +8,44 @@ namespace Microsoft.AspNetCore.Components.Discovery;
88
/// </summary>
99
internal class PageCollectionBuilder
1010
{
11-
private readonly Dictionary<string, IReadOnlyList<PageComponentBuilder>> _pages = new();
11+
private readonly Dictionary<string, IReadOnlyList<PageComponentBuilder>> _pagesByAssemblyName = new();
1212

1313
internal void Combine(PageCollectionBuilder pages)
1414
{
15-
foreach (var (assembly, pageCollection) in pages._pages)
15+
foreach (var (assembly, pageCollection) in pages._pagesByAssemblyName)
1616
{
17-
if (!_pages.ContainsKey(assembly))
17+
if (!_pagesByAssemblyName.ContainsKey(assembly))
1818
{
19-
_pages.Add(assembly, pageCollection);
19+
_pagesByAssemblyName.Add(assembly, pageCollection);
2020
}
2121
}
2222
}
2323

2424
internal void Exclude(PageCollectionBuilder pages)
2525
{
26-
foreach (var (assembly, _) in pages._pages)
26+
foreach (var (assembly, _) in pages._pagesByAssemblyName)
2727
{
28-
if (_pages.ContainsKey(assembly))
28+
if (_pagesByAssemblyName.ContainsKey(assembly))
2929
{
30-
_pages.Remove(assembly);
30+
_pagesByAssemblyName.Remove(assembly);
3131
}
3232
}
3333
}
3434

35-
internal void RemoveFromAssembly(string name)
35+
internal void Remove(string name)
3636
{
37-
_pages.Remove(name);
37+
_pagesByAssemblyName.Remove(name);
3838
}
3939

40-
internal void AddFromLibraryInfo(string assemblyName, IReadOnlyList<PageComponentBuilder> pages)
40+
internal void Add(string assemblyName, IReadOnlyList<PageComponentBuilder> pages)
4141
{
42-
_pages.Add(assemblyName, pages);
42+
_pagesByAssemblyName.Add(assemblyName, pages);
4343
}
4444

4545
internal PageComponentInfo[] ToPageCollection()
4646
{
4747
var totalCount = 0;
48-
foreach (var value in _pages.Values)
48+
foreach (var value in _pagesByAssemblyName.Values)
4949
{
5050
totalCount += value.Count;
5151
}
@@ -58,13 +58,13 @@ internal PageComponentInfo[] ToPageCollection()
5858
var list = new List<PageComponentInfo>(totalCount);
5959
// Reuse a buffer for computing the metadata
6060
var metadata = new List<object>();
61-
foreach (var (assembly, pages) in _pages)
61+
foreach (var (assembly, pages) in _pagesByAssemblyName)
6262
{
6363
for (var i = 0; i < pages.Count; i++)
6464
{
6565
var page = pages[i];
6666
ResolveMetadata(page.PageType!, metadata);
67-
var pageMetadata = metadata.ToArray();
67+
var pageMetadata = metadata.Count == 0 ? Array.Empty<object>() : metadata.ToArray();
6868
foreach (var route in page.RouteTemplates!)
6969
{
7070
list.Add(page.Build(route, pageMetadata));
@@ -79,6 +79,9 @@ private static void ResolveMetadata(Type componentType, List<object> result)
7979
{
8080
// We remove the route attribute since it is captured on the endpoint.
8181
// This is similar to how MVC behaves.
82+
// We don't want to have multiple routes on the same endpoint, as only
83+
// one of them is associated with it.
84+
// It's confusing for any consumer of the endpoint metadata to require
8285
var attributes = componentType.GetCustomAttributes(inherit: true);
8386
result.Clear();
8487
foreach (var attribute in attributes)
@@ -87,6 +90,7 @@ private static void ResolveMetadata(Type componentType, List<object> result)
8790
{
8891
continue;
8992
}
93+
9094
result.Add(attribute);
9195
}
9296
}

src/Components/Endpoints/src/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ Microsoft.AspNetCore.Components.Discovery.AssemblyComponentLibraryDescriptor.Ass
1616
Microsoft.AspNetCore.Components.Discovery.AssemblyComponentLibraryDescriptor.Components.get -> System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Components.Discovery.ComponentBuilder!>!
1717
Microsoft.AspNetCore.Components.Discovery.AssemblyComponentLibraryDescriptor.Pages.get -> System.Collections.Generic.IReadOnlyList<Microsoft.AspNetCore.Components.Discovery.PageComponentBuilder!>!
1818
Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder
19-
Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder.AddLibrary(Microsoft.AspNetCore.Components.Discovery.AssemblyComponentLibraryDescriptor! libraryBuilder) -> void
19+
Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder.AddComponentAssembly(Microsoft.AspNetCore.Components.Discovery.AssemblyComponentLibraryDescriptor! libraryBuilder) -> void
2020
Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder.Combine(Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder! other) -> void
2121
Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder.ComponentApplicationBuilder() -> void
2222
Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder.Exclude(Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder! builder) -> void
2323
Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder.HasLibrary(string! assemblyName) -> bool
24-
Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder.RemoveLibrary(string! assembly) -> void
24+
Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder.RemoveComponentAssembly(System.Reflection.Assembly! assembly) -> void
2525
Microsoft.AspNetCore.Components.Discovery.ComponentBuilder
2626
Microsoft.AspNetCore.Components.Discovery.ComponentBuilder.AssemblyName.get -> string!
2727
Microsoft.AspNetCore.Components.Discovery.ComponentBuilder.AssemblyName.set -> void

src/Components/Endpoints/test/Discovery/ComponentApplicationBuilderTests.cs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public void ComponentApplicationBuilder_CanAddLibrary()
1010
{
1111
// Arrange
1212
var builder = new ComponentApplicationBuilder();
13-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
13+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
1414
"App1",
1515
CreateApp1Pages("App1"),
1616
CreateApp1Components("App1")));
@@ -41,12 +41,12 @@ public void ComponentApplicationBuilder_CanAddMultipleLibraries()
4141
{
4242
// Arrange
4343
var builder = new ComponentApplicationBuilder();
44-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
44+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
4545
"App1",
4646
CreateApp1Pages("App1"),
4747
CreateApp1Components("App1")));
4848

49-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
49+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
5050
"App2",
5151
CreateApp2Pages("App2"),
5252
CreateApp2Components("App2")));
@@ -80,17 +80,17 @@ public void ComponentApplicationBuilder_CanRemoveLibrary()
8080
{
8181
// Arrange
8282
var builder = new ComponentApplicationBuilder();
83-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
83+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
8484
"App1",
8585
CreateApp1Pages("App1"),
8686
CreateApp1Components("App1")));
8787

88-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
88+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
8989
"App2",
9090
CreateApp2Pages("App2"),
9191
CreateApp2Components("App2")));
9292

93-
builder.RemoveLibrary("App1");
93+
builder.RemoveComponentAssembly("App1");
9494

9595
var app = builder.Build();
9696

@@ -115,13 +115,13 @@ public void ComponentApplicationBuilder_CanCombineBuilders()
115115
{
116116
// Arrange
117117
var builder = new ComponentApplicationBuilder();
118-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
118+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
119119
"App1",
120120
CreateApp1Pages("App1"),
121121
CreateApp1Components("App1")));
122122

123123
var builder2 = new ComponentApplicationBuilder();
124-
builder2.AddLibrary(new AssemblyComponentLibraryDescriptor(
124+
builder2.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
125125
"App2",
126126
CreateApp2Pages("App2"),
127127
CreateApp2Components("App2")));
@@ -156,23 +156,23 @@ public void ComponentApplicationBuilder_CombiningDoesNotDuplicateSharedDependenc
156156
{
157157
// Arrange
158158
var builder = new ComponentApplicationBuilder();
159-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
159+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
160160
"App1",
161161
CreateApp1Pages("App1"),
162162
CreateApp1Components("App1")));
163163

164-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
164+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
165165
"Shared",
166166
CreateSharedPages("Shared"),
167167
CreateSharedComponents("Shared")));
168168

169169
var builder2 = new ComponentApplicationBuilder();
170-
builder2.AddLibrary(new AssemblyComponentLibraryDescriptor(
170+
builder2.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
171171
"App2",
172172
CreateApp2Pages("App2"),
173173
CreateApp2Components("App2")));
174174

175-
builder2.AddLibrary(new AssemblyComponentLibraryDescriptor(
175+
builder2.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
176176
"Shared",
177177
CreateSharedPages("Shared"),
178178
CreateSharedComponents("Shared")));
@@ -215,28 +215,28 @@ public void ComponentApplicationBuilder_CanExcludeOtherBuilders()
215215
{
216216
// Arrange
217217
var builder = new ComponentApplicationBuilder();
218-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
218+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
219219
"App1",
220220
CreateApp1Pages("App1"),
221221
CreateApp1Components("App1")));
222222

223-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
223+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
224224
"App2",
225225
CreateApp2Pages("App2"),
226226
CreateApp2Components("App2")));
227227

228-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
228+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
229229
"Shared",
230230
CreateSharedPages("Shared"),
231231
CreateSharedComponents("Shared")));
232232

233233
var builder2 = new ComponentApplicationBuilder();
234-
builder2.AddLibrary(new AssemblyComponentLibraryDescriptor(
234+
builder2.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
235235
"App2",
236236
CreateApp2Pages("App2"),
237237
CreateApp2Components("App2")));
238238

239-
builder2.AddLibrary(new AssemblyComponentLibraryDescriptor(
239+
builder2.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
240240
"Shared",
241241
CreateSharedPages("Shared"),
242242
CreateSharedComponents("Shared")));

src/Components/Endpoints/test/RazorComponentEndpointDataSourceTest.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,10 @@ public void ExplicitlySetRenderModesAreRespected(
231231
}
232232
};
233233

234-
235234
private ComponentApplicationBuilder CreateBuilder(params Type[] types)
236235
{
237236
var builder = new ComponentApplicationBuilder();
238-
builder.AddLibrary(new AssemblyComponentLibraryDescriptor(
237+
builder.AddComponentAssembly(new AssemblyComponentLibraryDescriptor(
239238
"TestAssembly",
240239
Array.Empty<PageComponentBuilder>(),
241240
types.Select(t => new ComponentBuilder

0 commit comments

Comments
 (0)