Skip to content

[Blazor] Startup APIs API review #49754

@javiercn

Description

@javiercn

Background and motivation

These set of APIs define how Razor Component Endpoints are configured in DI and how endpoints to server Razor Component Applications are defined.

Proposed APIs

+static Microsoft.Extensions.DependencyInjection.RazorComponentsServiceCollectionExtensions.AddRazorComponents(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.AspNetCore.Components.Endpoints.IRazorComponentsBuilder!
+static Microsoft.Extensions.DependencyInjection.RazorComponentsServiceCollectionExtensions.AddRazorComponents(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<Microsoft.Extensions.DependencyInjection.RazorComponentOptions!>! setupAction) -> Microsoft.AspNetCore.Components.Endpoints.IRazorComponentsBuilder!
+Microsoft.AspNetCore.Components.WebAssembly.Server.TargetPickerUi.DisplayFirefox(Microsoft.AspNetCore.Http.HttpContext! context) -> System.Threading.Tasks.Task!
+Microsoft.Extensions.DependencyInjection.RazorComponentsBuilderExtensions
+static Microsoft.Extensions.DependencyInjection.RazorComponentsBuilderExtensions.AddWebAssemblyComponents(this Microsoft.AspNetCore.Components.Endpoints.IRazorComponentsBuilder! builder, System.Action<Microsoft.AspNetCore.Components.Endpoints.WebAssemblyComponentsEndpointOptions!>? configure = null) -> Microsoft.AspNetCore.Components.Endpoints.IRazorComponentsBuilder!
+Microsoft.Extensions.DependencyInjection.RazorComponentsBuilderExtensions
+static Microsoft.Extensions.DependencyInjection.RazorComponentsBuilderExtensions.AddServerComponents(this Microsoft.AspNetCore.Components.Endpoints.IRazorComponentsBuilder! builder, System.Action<Microsoft.AspNetCore.Components.Server.CircuitOptions!>? configure = null) -> Microsoft.AspNetCore.Components.Endpoints.IRazorComponentsBuilder!
+Microsoft.AspNetCore.Builder.RazorComponentEndpointConventionBuilder
+Microsoft.AspNetCore.Builder.RazorComponentEndpointConventionBuilder.Add(System.Action<Microsoft.AspNetCore.Builder.EndpointBuilder!>! convention) -> void
+Microsoft.AspNetCore.Builder.RazorComponentEndpointConventionBuilder.AddServerRenderMode() -> Microsoft.AspNetCore.Builder.RazorComponentEndpointConventionBuilder!
+Microsoft.AspNetCore.Builder.RazorComponentEndpointConventionBuilder.AddWebAssemblyRenderMode() -> Microsoft.AspNetCore.Builder.RazorComponentEndpointConventionBuilder!
+Microsoft.AspNetCore.Builder.RazorComponentEndpointConventionBuilder.ApplicationBuilder.get -> Microsoft.AspNetCore.Components.Discovery.ComponentApplicationBuilder!
+Microsoft.AspNetCore.Builder.RazorComponentEndpointConventionBuilder.Finally(System.Action<Microsoft.AspNetCore.Builder.EndpointBuilder!>! finallyConvention) -> void
+Microsoft.AspNetCore.Builder.RazorComponentsEndpointRouteBuilderExtensions
+Microsoft.AspNetCore.Components.Endpoints.WebAssemblyComponentsEndpointOptions
+Microsoft.AspNetCore.Components.Endpoints.WebAssemblyComponentsEndpointOptions.PathPrefix.get -> Microsoft.AspNetCore.Http.PathString
+Microsoft.AspNetCore.Components.Endpoints.WebAssemblyComponentsEndpointOptions.PathPrefix.set -> void
+Microsoft.AspNetCore.Components.Endpoints.WebAssemblyComponentsEndpointOptions.WebAssemblyComponentsEndpointOptions() -> void
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.FormMappingUseCurrentCulture.get -> bool
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.FormMappingUseCurrentCulture.set -> void
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.MaxFormMappingCollectionSize.get -> int
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.MaxFormMappingCollectionSize.set -> void
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.MaxFormMappingErrorCount.get -> int
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.MaxFormMappingErrorCount.set -> void
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.MaxFormMappingKeySize.get -> int
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.MaxFormMappingKeySize.set -> void
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.MaxFormMappingRecursionDepth.get -> int
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.MaxFormMappingRecursionDepth.set -> void
+Microsoft.Extensions.DependencyInjection.RazorComponentOptions.RazorComponentOptions() -> void
+Microsoft.Extensions.DependencyInjection.RazorComponentsServiceCollectionExtensions

Usage examples

Canonical scenarios

Server Side Rendered components

services.AddRazorComponents();


builder.MapRazorComponents<App>();

Server Side rendering + Interactive server components

services.AddRazorComponents()
  .AddServerComponents();


builder.MapRazorComponents<App>()
  .AddServerRenderMode();

Server Side rendering + Interactive webassembly components

services.AddRazorComponents()
  .AddWebAssemblyComponents();


builder.MapRazorComponents<App>()
  .AddWebAssemblyRenderMode();

Server Side rendering + Interactive server and webassembly components

services.AddRazorComponents()
  .AddServerComponents()
  .AddWebAssemblyComponents();

builder.MapRazorComponents<App>()
  .AddServerRenderMode()
  .AddWebAssemblyRenderMode();

Other advanced scenarios

Configuring global options

services.AddRazorComponents(options =>
{
  options.FormMappingUseCurrentCulture = false;
  options.MaxFormMappingCollectionSize = 100;
  options.MaxFormMappingErrorCount = 100;
  options.MaxFormMappingKeySize = 100;
  options.MaxFormMappingRecursionDepth = 100;
});

Configuring server component options

services.AddRazorComponents()
  .AddServerComponents(options =>
  {
    options.MaxBufferedUnacknowledgedRenderBatches = 5;
    ...
    // These are not new APIs
  });
services.AddRazorComponents()
  .AddServerComponents()
  .AddHubOptions(); // Configure options specific to the SignalR Hub (this is the equivalent of services.AddServerSideBlazor().AddHubOptions(opt => ...))

Risks

Metadata

Metadata

Assignees

Labels

api-approvedAPI was approved in API review, it can be implementedarea-blazorIncludes: Blazor, Razor Components

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions