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

.NET类库通过依赖注入自动生成控制器/注入端点方案咨询

类库控制器自动注册与端点注入方案

可以实现自动注册类库中的控制器,或者手动注入端点,以下是具体实现方式:

一、自动发现并注册类库中的ApiController

你在类库中编写的ProcessController可以被宿主ASP.NET Core应用自动识别,只需在宿主项目的Program.cs中配置控制器扫描范围,包含类库的程序集:

var builder = WebApplication.CreateBuilder(args);

// 添加控制器服务,并指定扫描类库的程序集
builder.Services.AddControllers()
    .AddApplicationPart(typeof(ProcessController).Assembly); // 传入类库中任意类型的Assembly

var app = builder.Build();

// 启用必要的中间件
app.UseRouting();
app.UseAuthorization();
app.MapControllers();

app.Run();

这样宿主应用启动时会自动加载类库中的ProcessController,对应的路由规则也会生效,无需在宿主项目中重复编写控制器代码。

二、手动注入端点(轻量替代方案)

如果不想依赖控制器特性,也可以在类库中封装端点注册逻辑,通过扩展方法让宿主应用调用:

类库中编写端点扩展

public static class ProcessEndpointExtensions
{
    public static IEndpointRouteBuilder MapProcessEndpoints(this IEndpointRouteBuilder app)
    {
        // 映射GetXXX端点
        app.MapGet("/Process/GetXXX", async (IProcessService processService, string xxx) =>
        {
            var result = await processService.GetXXX(xxx);
            return Results.Ok(result);
        })
        .WithName("xxxx");

        // 映射CreateTask端点
        app.MapPost("/Process/CreateTask", async (IProcessService processService, TaskCreateDto dto) =>
        {
            await processService.CreateTask(dto);
            return Results.Created();
        });

        // 映射CompleteTask端点
        app.MapPost("/Process/CompleteTask", async (IProcessService processService, string taskId) =>
        {
            await processService.CompleteTask(taskId);
            return Results.NoContent();
        });

        return app;
    }
}

宿主应用中调用扩展

var builder = WebApplication.CreateBuilder(args);

// 注册类库中的核心服务
builder.Services.AddScoped<IProcessService, ProcessService>();

var app = builder.Build();

app.UseRouting();
app.UseAuthorization();

// 注入类库中的端点
app.MapProcessEndpoints();

app.Run();

这种方式更灵活,无需依赖控制器,直接通过端点路由暴露类库功能。

三、关键注意事项

  • 类库中的控制器建议继承ControllerBase而非Controller,ControllerBase是WebAPI的专用基类,避免引入MVC视图相关的冗余功能
  • 类库需要引用Microsoft.AspNetCore.Mvc.Core或Microsoft.AspNetCore.App元包,才能使用[ApiController]等WebAPI特性
  • 类库中的核心业务服务(如处理任务的IProcessService)需要通过DI注册到宿主容器,可在类库中编写扩展方法简化注册流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:50:23