我有一个 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类型的服务
builder.Services.AddScoped<IJsMethods, JsMethods>();
需要添加到客户端和服务器项目中。对于 Blazor Web 应用程序。当渲染模式为 InteractiveWebAssembly 时,页面仍将在服务器上预渲染。所以它仍然需要服务器项目中存在该服务。如果你想禁用预渲染,你可以使用
@rendermode @(new InteractiveWebAssemblyRenderMode(false))