.NET 8 Blazor Hybrid集成RCL报错:未注册IScrollToLocationHash服务
解决.NET 8 Blazor Hybrid集成RCL时IScrollToLocationHash服务未注册错误
问题原因
.NET 8 对Blazor Hybrid的Router组件依赖逻辑做了调整,ScrollToLocationHash属性现在要求显式注册IScrollToLocationHash服务,而.NET 7中该服务是底层自动隐式处理的,这就导致迁移或集成RCL后出现服务缺失的报错。
解决方案
1. 显式注册服务
在主项目的Program.cs中添加以下代码,将Blazor Hybrid官方提供的默认实现注入到依赖注入容器:
builder.Services.AddSingleton<Microsoft.AspNetCore.Components.Routing.IScrollToLocationHash, Microsoft.AspNetCore.Components.WebView.BlazorHybridScrollToLocationHash>();
2. 修正Router组件配置
打开主项目的Main.razor,确保Router组件没有手动指定ScrollToLocationHash属性值,让依赖注入自动完成该属性的赋值:
- 错误写法(手动赋值):
<Router ScrollToLocationHash="@customScrollInstance"> <!-- 路由内容 --> </Router> - 正确写法(依赖注入自动注入):
<Router> <!-- 路由内容 --> </Router>
3. 验证RCL集成配置
确认主项目已正确添加RCL的程序集引用,且Router的AdditionalAssemblies配置能正确加载RCL中的页面组件:
<Router AdditionalAssemblies="new[] { typeof(YourRCLNamespace._Imports).Assembly }"> <!-- 路由内容 --> </Router>
验证
完成上述配置后,重新编译并运行Blazor Hybrid应用,IScrollToLocationHash服务未注册的错误即可解决。
内容的提问来源于stack exchange,提问作者René AD
相关产品推荐
相关产品推荐

