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

ASP.NET Core 6 Web API如何正确注册Application层服务集合

.NET 6洋葱架构分层服务注册问题修复方案

IServiceCollection does not contain AddApplication()报错和.NET 6依赖注入机制变更无关:.NET 6只是将原本Startup.cs承载的服务注册、中间件配置逻辑合并到了顶级语句编写的Program.cs中,DI注册的核心逻辑和旧版.NET Core完全一致。找不到扩展方法是以下两个常见原因导致,按顺序排查即可:

  • 缺少对应命名空间引用
  • 项目引用未正常生效

修复步骤

1. 添加缺失的命名空间引用

你的AddApplication扩展方法定义在Application命名空间下,.NET 6的顶级语句Program.cs不会自动引入未配置全局导入的命名空间,直接调用方法会找不到扩展定义。
在API项目的Program.cs文件最顶部添加命名空间引用即可:

using Application;

如果需要全局生效避免每个文件重复书写using,可以在API项目的GlobalUsings.cs文件中添加全局引用:

global using Application;

2. 校验项目引用有效性

如果添加命名空间后仍然报错,右键点击API项目的「依赖项-项目」节点,确认Application项目的引用是否正常加载。如果引用状态异常(比如显示黄色警告标),删除现有引用后重新添加Application项目的项目引用即可。


洋葱架构下.NET 6服务注册参考示例

修复引用问题后,你原本的注册逻辑可以正常运行,完整的Program.cs服务注册部分参考如下:

// 引入各分层依赖注入扩展的命名空间
using Application;
using Infrastructure;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;

var builder = WebApplication.CreateBuilder(args);

// 身份认证配置
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

// 分层服务注册,逻辑和旧版Startup.ConfigureServices中完全一致
builder.Services.AddApplication(); // 注册Application层服务:MediatR、AutoMapper、业务服务抽象等
builder.Services.AddInfrastructure(builder.Configuration); // 注册Infrastructure层服务:仓储实现、第三方服务调用、数据库上下文等

builder.Services.AddControllers();

// 中间件管道配置
var app = builder.Build();
// 按业务需求编写中间件逻辑,比如异常处理、路由、鉴权授权等
app.Run();

额外注意:如果你使用的是12.0及以上版本的MediatR,旧版services.AddMediatR(Assembly.GetExecutingAssembly())写法已经过时,建议更新Application层扩展方法中的MediatR注册逻辑,避免编译警告或运行时错误:

// Application项目DependencyInjection类中的MediatR注册更新为
services.AddMediatR(cfg => 
    cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly())
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:12:47