You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至VS2022和.NET6后,Blazor Server作用域服务注册修正方法

问题分析与解决

核心问题

你的Program.cs代码存在逻辑错误:在启动宿主之后才进行服务注册,这导致后续的服务配置完全没有被应用。CreateHostBuilder(args).Build().Run();会阻塞当前线程,后面的var builder = WebApplication.CreateBuilder(args);及服务注册代码根本不会执行。

正确的服务注册方式(.NET6 Blazor Server)

.NET6采用了简化的WebApplication模型,你需要在构建宿主前完成服务注册,以下是两种正确写法:

方式一:使用顶层语句(.NET6默认模板推荐风格)

var builder = WebApplication.CreateBuilder(args);

// 注册所有服务
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<ConnectService>();
builder.Services.AddScoped<TagService>();

var app = builder.Build();

// 配置请求管道
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();

方式二:保留Main方法的写法

如果坚持使用Main方法结构,需将服务注册放在宿主构建与启动之前:

public static void Main(string[] args)
{
    var builder = WebApplication.CreateBuilder(args);
    
    // 先完成服务注册
    builder.Services.AddRazorPages();
    builder.Services.AddServerSideBlazor();
    builder.Services.AddScoped<ConnectService>();
    builder.Services.AddScoped<TagService>();       
    
    // 再构建并运行宿主
    var app = builder.Build();
    
    // 配置请求管道
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();

    app.MapBlazorHub();
    app.MapFallbackToPage("/_Host");
    
    app.Run();
}

额外验证要点

  • 确保ConnectService和TagService类可正常实例化(无私有构造函数,依赖的其他服务已正确注册)
  • Razor页面的注入语法@inject TagService TagService无需修改,服务注册正确后即可正常注入

内容的提问来源于stack exchange,提问作者Mdarende

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:50:42