在服务器和客户端 Blazor Web 应用程序 .Net 8 中注册服务

问题描述 投票:0回答:1

我有一个 Blazor Web App .Net 8 项目。 我想在Client Program.cs文件中注册JsMethods服务

//JsMethods Service
namespace QK.Services.Js
{
    public interface IJsMethods
    {
        Task RunJsCommand(string command);
    }

    public class JsMethods : IJsMethods
    {
        private readonly IJSRuntime _jsRuntime;

        public JsMethods(IJSRuntime jsRuntime)
        {
            _jsRuntime = jsRuntime;
        }

        public async Task RunJsCommand(string command)
        {
            await _jsRuntime.InvokeVoidAsync(command);
        }
    }
}

// Program.cs in client
builder.Services.AddScoped<IJsMethods, JsMethods>();

现在我想在 HomeCarousel 组件中运行我的服务

namespace QK.Client.Components
{
    public class HomeCarouselBase : ComponentBase
    {
        [Inject] private ICall call { get; set; }
        [Inject] public ImageHelper.IImgService _ImgService { get; set; } 
        [Inject] private IJsMethods _jsMethods { get; set; }
        public IReadOnlyList<Dto.MainSlider.ListDto>? Sliders { get; set; }
        protected override async Task OnInitializedAsync()
        {
            Sliders = await call.CallApi<CallApi.EmptyModel, IReadOnlyList<Dto.MainSlider.ListDto>?>(QK.CallApi.Address.ListMainSlider,
                new EmptyModel());
        }

        protected override async Task OnAfterRenderAsync(bool firstRender)
        {
            await _jsMethods.RunJsCommand("swiperHome();");
        }
    }
}

但这会产生错误

没有类型为“QK.Services.Js.IJsMethods”的已注册服务。

为什么??

没有注册Service类型的服务

blazor blazor-server-side blazor-webassembly
1个回答
0
投票

builder.Services.AddScoped<IJsMethods, JsMethods>();
需要添加到客户端和服务器项目中。对于 Blazor Web 应用程序。当渲染模式为 InteractiveWebAssembly 时,页面仍将在服务器上预渲染。所以它仍然需要服务器项目中存在该服务。如果你想禁用预渲染,你可以使用

@rendermode @(new InteractiveWebAssemblyRenderMode(false))
© www.soinside.com 2019 - 2024. All rights reserved.