.NET MAUI Blazor桌面应用:如何获取传入应用的启动参数
在.NET MAUI Blazor中获取应用启动参数
要获取.NET MAUI Blazor应用的启动参数,需要分两步:先在MAUI层面捕获参数,再传递给Blazor组件/逻辑使用,以下是具体实现:
1. 在MAUI启动逻辑中捕获启动参数
打开项目中的MauiProgram.cs,通过平台特定代码获取启动参数,并将其注册为全局服务,方便Blazor端注入调用:
using Microsoft.Maui.LifecycleEvents; using System; var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); }); // 存储启动参数的变量 string[] launchArgs = Array.Empty<string>(); // 根据不同平台获取启动参数 #if WINDOWS // Windows平台直接读取命令行参数 launchArgs = Environment.GetCommandLineArgs(); #elif ANDROID // Android平台从Intent中读取参数(需提前配置Intent Filter) var intent = Android.App.Application.Context.Intent; if (intent?.Extras != null) { // 示例:读取自定义的参数数组,也可根据实际需求解析Intent的Data或其他Extra launchArgs = intent.Extras.GetStringArray("launchArgs") ?? Array.Empty<string>(); } #elif IOS || MACCATALYST // iOS/Mac Catalyst平台从LaunchOptions中解析参数 var launchOptions = UIKit.UIApplication.SharedApplication.LaunchOptions; if (launchOptions != null) { // 示例:将LaunchOptions的键值对转为字符串数组 launchArgs = launchOptions.Select(kv => $"{kv.Key}={kv.Value}").ToArray(); } #endif // 将启动参数注册为单例服务,供Blazor端注入 builder.Services.AddSingleton(launchArgs); // 配置Blazor相关服务 builder.Services.AddMauiBlazorWebView(); #if DEBUG builder.Services.AddBlazorWebViewDeveloperTools(); #endif var app = builder.Build(); await app.RunAsync();
2. 在Blazor中使用启动参数
在Blazor组件中注入使用
直接在Razor组件中注入参数数组,即可展示或处理:
@inject string[] LaunchArgs <div> <h3>应用启动参数</h3> @if (LaunchArgs.Length > 0) { <ul> @foreach (var arg in LaunchArgs) { <li>@arg</li> } </ul> } else { <p>未传入启动参数</p> } </div>
在Blazor的Program.cs中使用
如果需要在Blazor启动初始化时使用参数,可通过服务容器获取:
var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add<App>("#app"); builder.RootComponents.Add<HeadOutlet>("head::after"); // 从服务容器中获取启动参数 var launchArgs = builder.Services.BuildServiceProvider().GetRequiredService<string[]>(); // 此处可根据参数做初始化配置,比如注册服务、设置全局变量等 await builder.Build().RunAsync();
注意事项
- Android平台:如果是通过外部应用启动,需在
AndroidManifest.xml中配置对应的Intent Filter,才能正确接收参数。 - Windows平台:
Environment.GetCommandLineArgs()的第一个元素是应用自身的路径,后续元素才是传入的参数。
内容的提问来源于stack exchange,提问作者lightbulb05
相关产品推荐
相关产品推荐

