.NET 8托管式Blazor WASM客户端DI服务注册失败问题咨询
.NET 8托管式Blazor WASM客户端DI服务注册失败问题咨询
嘿,各位大佬,我碰到一个DI注册的问题卡好久了,想请大家帮忙看看:
我在.NET 8的托管式Blazor Web应用(WASM客户端+服务器托管+REST API)里,尝试在客户端Program.cs注册一个ClientDataAccess服务,代码如下:
public class Program { public static async Task Main( string[] args ) { var builder = WebAssemblyHostBuilder.CreateDefault( args ); builder.Services.AddSingleton<ClientDataAccess>(); await builder.Build().RunAsync(); } }
不管这个ClientDataAccess是空类,还是换成AddScoped/AddTransient注册,都没用,注入的时候总会抛出这个异常:
InvalidOperationException: Cannot provide a value for property 'Data' on type 'MyProgram.Client.Components.MyEditor'. There is no registered service of type 'MyProgram.Client.Services.ClientDataAccess'.
我已经确认ClientDataAccess的访问修饰符是public的,但就是找不到问题所在,有没有大佬能指点下可能的原因或者排查方向?
我自己先梳理了几个可能的排查点,也想和大家确认下:
- 是不是搞混了项目的Program文件? 因为是托管式架构,服务器端和客户端各有一个Program.cs,我会不会不小心把服务注册到服务器项目里,而非客户端项目?
- 命名空间引用问题? Program.cs里有没有正确引用
MyProgram.Client.Services这个命名空间?有没有漏写using MyProgram.Client.Services;? - 组件注入是否正确? MyEditor组件里的注入是不是加了
[Inject]特性?比如是不是写成了:
会不会是漏了这个特性导致注入失败?[Inject] public ClientDataAccess Data { get; set; } - 项目引用是否完整? 如果
ClientDataAccess在单独的类库项目里,客户端项目有没有正确添加对这个类库的引用?
备注:内容来源于stack exchange,提问作者hamstar
相关产品推荐
相关产品推荐

