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

如何在ASP.NET CORE API中注册存在构造函数依赖的服务

ASP.NET Core 构造函数依赖注册方法

你可以直接手动实例化依赖类传入构造函数完成注册,这是合法的写法,针对你当前给出的代码,修改后可以直接运行:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "TestAPI", Version = "v2" });
    });

    // 先实例化依赖项
    var adminRepository = new AdminRepository();
    services.AddSingleton<IAdminRepository>(adminRepository);
    // 将已实例化的依赖传入目标服务构造函数
    services.AddSingleton<IAdminService>(new AdminService(adminRepository));
}

但日常开发更推荐直接使用DI容器的自动依赖解析能力,不需要手动实例化服务,你只需要按接口和实现类的对应关系完成注册,容器会自动识别服务构造函数要求的依赖,从已注册的服务列表中找到对应实例完成注入,写法更简洁,后续服务新增依赖时也不需要修改注册代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "TestAPI", Version = "v2" });
    });

    // 直接注册服务映射关系,无需手动new
    services.AddSingleton<IAdminRepository, AdminRepository>();
    services.AddSingleton<IAdminService, AdminService>();
}

两种注册方式的适用场景区别:

  • 手动传入实例:由开发人员自己负责服务对象的创建,容器仅负责保存你传入的实例,不处理后续的依赖链解析和生命周期销毁逻辑,适合无额外依赖的简单服务、或者需要传入自定义预配置实例的场景。如果后续服务新增构造函数依赖,必须手动修改实例化代码补全参数,否则会抛出运行时错误。
  • 泛型自动注册:由DI容器负责管理完整的依赖链解析、服务实例创建与生命周期释放,不管服务嵌套了多少层依赖,只要对应依赖都完成了注册,容器就能自动完成注入,是常规业务开发的首选写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:06:20