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

.NET 6中如何添加并正确调用自定义ApplicationService?

.NET 6 中正确调用自定义服务扩展方法的方案

问题分析

你的代码存在两个核心问题:

  1. 扩展方法AddApplicationServices参数冗余且未返回IServiceCollection,不符合.NET依赖注入扩展方法的规范
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:21:38