NeuCharFramework (NCF)
  • NCF - NeuCharFramework
  • 项目

    • 准备
    • NcfPackageSources 源码指南
    • 动态WebApiEngine
    • 部署
    • MCP(Model Context Protocol)模块
    • Senparc.AI
  • 帮助

    • 在线资源
    • 问答社区
    • QQ群(147054579)
    • Senparc微信SDK
  • Gitee
  • GitHub
  • English
  • 简体中文
GitHub
  • NCF - NeuCharFramework
  • 项目

    • 准备
    • NcfPackageSources 源码指南
    • 动态WebApiEngine
    • 部署
    • MCP(Model Context Protocol)模块
    • Senparc.AI
  • 帮助

    • 在线资源
    • 问答社区
    • QQ群(147054579)
    • Senparc微信SDK
  • Gitee
  • GitHub
  • English
  • 简体中文
GitHub
  • NCF 概要

    • NCF - NeuCharFramework
    • 关于 NCF
    • 环境要求
    • 前后端分离模式
    • Xncf模块简介
  • 准备开发

    • 获取 NCF 模板源码
    • 使用 Visual Studio 运行 NCF
    • 使用 CLI 运行 NCF
    • 安装
    • 管理员登录
    • 管理员后台
    • appsettings.json 配置
    • 模块管理
    • 获取文档
  • 配置

    • 入口文件
    • 数据库设置
    • appsettings.json 配置
    • Docker
    • Dapr
    • 配置多租户
    • Redis 缓存
  • Template 二次开发

    • NCF 模块化开发思想
    • XNCF 的构成
    • XNCF 二次开发接口与边界
    • 创建第一个 Xncf 模块
    • 当前 XNCF 模板结构
    • 实现自己的业务逻辑
    • 更新 Xncf 模块
    • 模块之间如何调用
    • 发布Xncf 模块到nuget.org
    • 更新基础库
    • 手工创建最小 XNCF 模块
    • 嵌入静态资源文件到NCF中
    • 发布本地Nuget包
    • 进阶
  • 数据库

    • 数据库设置
    • 多数据库支持
    • 指定数据库
    • 更新 Senparc.Service 项目的数据库迁移文件(Migrations)
    • 多数据库原理
    • 数据库停机坪(DatabasePlant)
    • 停机坪操作数据库迁移和更新
  • 单元测试

    • NCF 单元测试介绍
    • 开始开发
    • 进阶
    • 附录
  • Q&A

    • NCF名词解释
    • NCF常见问题
  • 新发布

    • 新功能
    • 升级指导
    • 日志

手工创建最小 XNCF 模块

推荐优先使用 XNCF 模块生成器。 本页用于理解当前注册和 Function 机制,不再使用旧版 IXncfFunction。 它仍属于 Template 二次开发,不解释框架内部扫描源码;接口选择先看 XNCF 二次开发接口与边界。

1. 创建模块项目

当前 NCF 开发线以 .NET 10 为基线。项目至少引用与宿主版本匹配的 Senparc.Ncf.XncfBase 和 Senparc.Ncf.Core,并由宿主项目引用模块程序集。

推荐目录:

MyOrg.Xncf.Sample/
  Application/
    AppServices/
    DTOs/Request/
  Register.cs

2. 创建 Register

using Senparc.Ncf.XncfBase;

namespace MyOrg.Xncf.Sample;

[XncfRegister]
public partial class Register : XncfRegisterBase, IXncfRegister
{
    public override string Name => "MyOrg.Xncf.Sample";
    public override string Uid => "36C6BE43-BA0D-4898-A4B4-98AB22146C92";
    public override string Version => "0.1.0";
    public override string MenuName => "Sample";
    public override string Icon => "fa fa-star";
    public override string Description => "Minimal XNCF sample";
}

Uid 首次生成后必须固定。不要添加 Functions 属性;它已退出当前注册机制。

3. 创建请求模型

using Senparc.Ncf.XncfBase.FunctionRenders;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MyOrg.Xncf.Sample.Application.DTOs.Request;

public class EchoRequest : FunctionAppRequestBase
{
    [Required]
    [MaxLength(200)]
    [Description("需要返回的文本")]
    public string Message { get; set; }
}

复杂表单可使用 FunctionParameterUi 和 SelectionList;需要异步装载选项时, 重写请求模型的 LoadData(IServiceProvider)。

4. 创建 AppService Function

using MyOrg.Xncf.Sample.Application.DTOs.Request;
using Senparc.Ncf.Core.AppServices;
using Senparc.Ncf.Core.Models;

namespace MyOrg.Xncf.Sample.Application.AppServices;

public class SampleAppService : AppServiceBase
{
    public SampleAppService(IServiceProvider serviceProvider)
        : base(serviceProvider) { }

    [FunctionRender("Echo", "返回输入文本", typeof(Register))]
    public Task<StringAppResponse> Echo(EchoRequest request)
    {
        return this.GetStringResponseAsync((response, logger) =>
        {
            logger.Append("Echo executed");
            response.Data = request.Message;
            return Task.FromResult<string>(null);
        });
    }
}

框架会扫描 AppServiceBase 子类的 [FunctionRender] 方法并完成登记。

5. 验证

  1. 宿主项目引用模块项目并成功构建。
  2. 启动站点,在模块管理中找到、安装并启用模块。
  3. 打开模块的设置/执行页面,确认 Echo Function 可见。
  4. 输入文本执行,确认返回值和日志正确。
  5. 若 Function 数量为 0,检查程序集是否被宿主加载、AppService 是否继承 AppServiceBase、方法是否有 [FunctionRender]。

需要数据库、Area、MCP 或本地化时,请从当前 XncfBuilder 模板复制相应能力, 不要从旧版 IXncfFunction 教程拼接代码。

若要修改扫描、注册或基类实现,再进入 NcfPackageSources 源码指南。

在 GitHub 上编辑此页
上次更新:
贡献者: Jeffrey Su, JeffreySu, MLTechnology
Prev
更新基础库
Next
嵌入静态资源文件到NCF中