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

Blazor Server后台代码通过DI无法创建服务实例问题求助

问题排查与解决

1. 确认Autofac是否正确替换Blazor的默认服务提供器

Blazor Server默认使用内置DI,若集成Autofac但未正确替换服务提供器,内置DI无法解析构造函数中的依赖,会尝试调用无参构造函数,从而触发异常。

检查Program.cs的配置,确保包含以下关键步骤:

var builder = WebApplication.CreateBuilder(args);

// 替换为Autofac服务提供器工厂
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

// 配置Autofac容器
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
    // 注册自定义模块
    containerBuilder.RegisterModule<PresentationAutofacModule>();
});

// 常规Blazor配置
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();

// 注意:若已通过Autofac注册ICustomerService,不要在此重复用builder.Services.AddScoped注册,避免冲突

2. 检查组件构造函数的访问修饰符

确保Customers组件的构造函数为public,Blazor需要通过公共构造函数实例化组件:

public class Customers : ComponentBase
{
    private readonly ICustomerService _customerService;

    // 必须是public修饰符
    public Customers(ICustomerService customerService)
    {
        _customerService = customerService;
    }

    // 属性注入需配合Autofac配置,Blazor内置DI不支持属性注入
    [Inject]
    public ICustomerViewModel CustomerViewModel { get; set; }
}

3. 配置Autofac支持属性注入(若使用属性注入)

Blazor内置DI不支持属性注入,若你使用了[Inject]属性,需在PresentationAutofacModule中开启属性注入:

public class PresentationAutofacModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
        // 注册程序集内的接口实现(原有逻辑)
        builder.RegisterAssemblyTypes(typeof(PresentationAutofacModule).Assembly)
               .AsImplementedInterfaces()
               .InstancePerLifetimeScope();

        // 为Blazor组件开启属性注入
        builder.RegisterAssemblyTypes(typeof(Customers).Assembly)
               .Where(t => t.IsSubclassOf(typeof(ComponentBase)))
               .PropertiesAutowired();
    }
}

4. 验证依赖服务的注册完整性

确认ICustomerService的实现类已在PresentationAutofacModule中正确注册,或已单独在Autofac容器中注册,避免因服务未注册导致DI无法解析构造函数参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:28:33