有没有办法(和点)在客户端提供 DI 服务?

问题描述 投票:0回答:1
    public class Program {
        public static async Task Main( string[] args ) {
            var builder = WebAssemblyHostBuilder.CreateDefault( args );
            builder.Services.AddSingleton<ClientDataAccess>();
            await builder.Build().RunAsync();
        }
    }

为什么此代码无法在我的客户端 (WASM) Blazor 中将

ClientDataAccess
添加为 DI 服务?服务是否是空类,或者我是否将其作为单例注入,都无关紧要。它只是产生这个异常:

InvalidOperationException:无法为类型“MyProgram.Client.Components.MyEditor”上的属性“Data”提供值。没有类型为“MyProgram.Client.Services.ClientDataAccess”的已注册服务。

这适用于使用客户端 Blazor 和服务器端托管以及 REST API 的 .net 8 blazor Web 应用程序。

c# asp.net-core dependency-injection blazor .net-8.0
1个回答
0
投票

发布的代码应该适用于独立的 Wasm 应用程序。

当使用“Blazor Web App”时,无论是渲染模式 WebAssembly 还是 Auto,您都必须注册该服务两次:在两个

Program.cs
文件中。您只需在客户端中实现一次。

您可能必须重新考虑 Singleton ClientDataAccess 在客户端中可以做什么。请注意,您将有 2 个“每个平台单例”实例。

© www.soinside.com 2019 - 2024. All rights reserved.