Skip to content

Fast.DynamicApplication

逐成员 API、参数与返回参考

版本 3.5.35;目标 net8.0net9.0net10.0;依赖 Fast.RuntimeFast.UnifyResult。将被发现的应用服务映射为 MVC API。

bash
dotnet add package Fast.DynamicApplication

注册和最小应用服务

公开入口为 AddDynamicApplication(this IServiceCollection services, string routePrefix = null),返回原服务集合。必须先调用 AddControllers()AddControllersWithViews();缺少 ApplicationPartManager 时立即抛 InvalidOperationException

以下为消费端 Program.cs,使用 Microsoft.NET.Sdk.Web,目标选择本页列出的 .NET 8、9 或 10,并安装上方指定包。app.Run() 表示正常宿主启动;本次文档维护不会执行它。

csharp
using Fast.DynamicApplication;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddDynamicApplication("api");

var app = builder.Build();
app.MapControllers();
app.Run();

[Route("api/sample")]
public sealed class SampleService : IDynamicApplication
{
    [HttpGet("message")]
    public string Message() => "hello";
}

宿主另行 MapControllers();本例显式固定 route,避免消费者依赖类名/方法名推导。动态发现取决于框架程序集扫描范围,不等于任意加载的 DLL 都暴露 API。

描述与路由合同

类型 / 成员语义
IDynamicApplication动态 API 服务标记
DynamicApplicationContext.RoutePrefix注册时设置的全局前缀,公开读取、内部设置
ApiDescriptionSettingsAttribute()描述设置,Order 默认 0
ApiDescriptionSettingsAttribute(bool enabled)设置 IgnoreApi = !enabled,影响 API Explorer;不能作为授权控制
ApiDescriptionSettingsAttribute(params string[] groups)设置 Groups,并使用 ## 连接分组名
NameModuleVersion参与名称、模块、版本约定
GroupsOrderDescription文档分组、顺序、描述;Description 支持 HTML,内容来源需要受控

现有显式 Route/HTTP 特性优先参与路由配置。没有显式绑定来源的基础类型参数会被设置为 FromQuery;复杂对象和特殊绑定参数分别处理,不应推断所有参数都进入路径。对外稳定接口建议显式表达 HTTP 方法与绑定来源。

边界

此模块处理 MVC 控制器发现,不替代认证、权限、业务事务或 OpenAPI 文件生成。返回非泛型 Task/ValueTask 与同步值均需由 MVC 管道处理,具体 JSON 协议由序列化及统一结果模块决定。注册顺序错误是明确异常,不需要通过复制 ApplicationPartManager 绕开。

来源与验证

依据 注册实现路由约定。本轮未编译或启动 API 宿主,示例路由尚未执行验证。