.NET 8 Blazor Server中FluentUI的FluentDialogProvider初始化失败
.NET 8 Blazor Server中FluentUI对话框异常问题的解决办法
针对你遇到的「按文档配置后仍提示DialogService未注册,手动注册后又提示未放置FluentDialogProvider」的矛盾问题,可按以下步骤排查解决:
1. 升级FluentUI组件包
确保你使用的是最新稳定版的Microsoft.FluentUI.AspNetCore.Components。旧版本存在AddFluentUIComponents()未自动注册DialogService的bug,更新后即可通过该扩展方法完成服务注册,无需手动添加AddScoped<DialogService>()。
2. 调整服务注册顺序
在Program.cs中,将builder.Services.AddFluentUIComponents();放在所有业务服务(如你的MaterialService)注册之前,且确保在builder.Build()完成前执行:
// 先注册FluentUI组件服务 builder.Services.AddFluentUIComponents(); // 再注册其他业务服务 builder.Services.AddScoped<MaterialService>(); var app = builder.Build(); // ...后续中间件配置
3. 修正FluentDialogProvider的布局位置
将<FluentDialogProvider />移出<FluentLayout>嵌套结构,直接放在布局文件的最底部,避免嵌套组件的作用域限制导致Provider无法被检测到:
@inherits LayoutComponentBase <FluentLayout> <FluentHeader Height="65" Style="background-color: #012389;"> <HeaderText /> </FluentHeader> <FluentStack Class="main" Orientation="Orientation.Horizontal" Width="100%"> <NavMenu /> <FluentBodyContent> <div class="content"> @Body </div> </FluentBodyContent> </FluentStack> </FluentLayout> <FluentToastProvider Position="ToastPosition.BottomRight" RemoveToastsOnNavigation="false" ShowCloseButton="true" /> <FluentDialogProvider />
4. 移除手动注册的DialogService
删除builder.Services.AddScoped<DialogService>();,因为AddFluentUIComponents()已经完成了该服务的注册,重复注册会导致服务实例冲突,进而无法关联到正确的FluentDialogProvider。
内容的提问来源于stack exchange,提问作者paulpitchford
相关产品推荐
相关产品推荐

