MAUI Blazor如何通过代码自动配置嵌套类库的AdditionalAssembly?
实现MAUI Blazor类库路由的自动配置
完全可行,这种方式能大幅简化配置流程,不用手动逐个添加依赖类库的程序集。具体实现步骤如下:
自定义扩展方法封装注册逻辑
在你的Razor类库中创建静态扩展类,统一收集当前类库及依赖的含页面类库的程序集,通过服务注册传递给主项目:public static class LibraryServiceExtensions { public static IServiceCollection AddMyLibrary(this IServiceCollection services) { // 获取当前类库的程序集 var myLibAssembly = typeof(LibraryServiceExtensions).Assembly; // 加入依赖类库的程序集(按需添加) var dependentLibAssembly = typeof(DependentLibrary.Pages.DemoPage).Assembly; var targetAssemblies = new[] { myLibAssembly, dependentLibAssembly }; // 注册程序集提供类 services.AddSingleton(sp => new RouterAssembliesProvider(targetAssemblies)); return services; } } // 辅助类,用于存储要添加的路由程序集 public class RouterAssembliesProvider { public IEnumerable<Assembly> Assemblies { get; } public RouterAssembliesProvider(IEnumerable<Assembly> assemblies) { Assemblies = assemblies; } }主项目中调用扩展方法
在MAUI项目的MauiProgram.cs里,仅需一行代码完成类库的路由配置:var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); }); builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); // 调用自定义扩展方法,自动注册所有需要的路由程序集 builder.Services.AddMyLibrary(); return builder.Build();修改Main.razor的Router组件
注入注册的RouterAssembliesProvider,将收集到的程序集合并到路由的AdditionalAssemblies中:@inject RouterAssembliesProvider AssembliesProvider <Router AppAssembly="@typeof(Main).Assembly" AdditionalAssemblies="@(AssembliesProvider?.Assemblies ?? Enumerable.Empty<Assembly>())"> <Found Context="routeData"> <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" /> <FocusOnNavigate RouteData="@routeData" Selector="h1" /> </Found> <NotFound> <LayoutView Layout="@typeof(MainLayout)"> <p>抱歉,当前地址不存在内容。</p> </LayoutView> </NotFound> </Router>
这样用户仅需引用你的类库并调用AddMyLibrary(),就能自动完成所有路由相关的程序集配置,无需关心底层依赖的类库细节。
内容的提问来源于stack exchange,提问作者GLuca74
相关产品推荐
相关产品推荐

