.NET 6中如何添加并正确调用自定义ApplicationService?
.NET 6 中正确调用自定义服务扩展方法的方案
问题分析
你的代码存在两个核心问题:
- 扩展方法
AddApplicationServices参数冗余且未返回IServiceCollection,不符合.NET依赖注入扩展方法的规范 - Program.cs中的调用参数与扩展方法定义不匹配
步骤1:修正ApplicationServiceExtensions扩展方法
移除冗余的WebApplicationBuilder参数,并确保方法返回IServiceCollection以支持链式调用:
using API.Data; using API.Interfaces; using API.Services; using Microsoft.EntityFrameworkCore; namespace API.Extensions { public static class ApplicationServiceExtensions { // 仅保留IConfiguration参数,移除WebApplicationBuilder public static IServiceCollection AddApplicationServices(this IServiceCollection services, IConfiguration config) { services.AddDbContext<DataContext>(options => { options.UseSqlServer(config.GetConnectionString("DefaultConnection")); }); services.AddScoped<ITokenService, TokenService>(); // 必须返回IServiceCollection,支持链式调用 return services; } } }
步骤2:在.NET 6的Program.cs中正确调用
在Program.cs中,直接通过builder.Services调用扩展方法,并传入builder.Configuration:
var builder = WebApplication.CreateBuilder(args); // 调用扩展方法,传入builder.Configuration builder.Services.AddApplicationServices(builder.Configuration); // 后续的其他配置... var app = builder.Build(); // 中间件配置... app.Run();
补充说明
如果不想传递IConfiguration参数,也可以调整扩展方法直接基于WebApplicationBuilder扩展,但保持依赖注入IConfiguration的写法更具通用性,适配更多场景。
内容的提问来源于stack exchange,提问作者Ahsan Khan
相关产品推荐
相关产品推荐

