Blazor中通常使用@page指令来定义页面。但是,您也可以以编程方式注册页面。这是使用Blazor框架提供的LazyAssemblyLoader和RouteAttribute类来实现的。下面是一个示例:
using Microsoft.AspNetCore.Components;
namespace MyApp.Pages { [Route("/my-page")] public class MyPage : ComponentBase { public override string ToString() { return "/my-page"; } } }
using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; using System.Reflection; using System.Threading.Tasks;
namespace MyApp.Client
{
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add
// Add a LazyAssemblyLoader to register pages programatically
builder.Services.AddSingleton(new LazyAssemblyLoader(assemblyProvider => {
var assembly = Assembly.Load("MyApp.Pages");
foreach (var type in assembly.GetExportedTypes())
{
if (typeof(IComponent).IsAssignableFrom(type) && type != typeof(App))
{
assemblyProvider.AddComponent(type);
}
}
}));
await builder.Build().RunAsync();
}
}
}
在这里,我们添加了一个LazyAssemblyLoader,并使用它来扫描您的MyApp.Pages程序集中的所有类型。对于任何实现IComponent接口的类型,我们将其添加到程序集提供程序中。在这种情况下,我们只有一个页面(MyPage)需要注册。
现在,在您的应用程序中,您可以使用导航到“/my-page”路径来访问MyPage。
这就是如何以编程方式注册Blazor页面。