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

Bot Framework Composer自定义动作项目读取appsettings.json遇技术问题求助

在Bot Framework Composer自定义动作中读取appsettings.json的解决方案

一、放弃旧的State读取方式,改用依赖注入(推荐)

旧方案dc.Parent.State.GetValue("settings")因版本迭代已过时,且泛型参数缺失导致CS0411错误。现代Composer项目基于依赖注入设计,推荐通过以下方式读取配置:

1. 添加必要NuGet包

在自定义动作项目中安装:

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Options(若使用强类型绑定)

2. 通过构造函数注入IConfiguration

修改自定义动作类,注入IConfiguration后直接读取配置:

using Microsoft.Extensions.Configuration;
using Microsoft.Bot.Builder.Dialogs;
using System.Threading.Tasks;
using System.Threading;

public class MyCustomAction : Dialog
{
    private readonly IConfiguration _configuration;

    // 构造函数注入IConfiguration
    public MyCustomAction(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public override async Task<DialogTurnResult> BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default)
    {
        // 方式1:直接读取单个配置项
        var targetSetting = _configuration["YourSettingKeyFromAppsettings"];

        // 方式2:绑定到强类型对象(需提前定义类)
        var botSettings = _configuration.GetSection("BotSettings").Get<BotSettings>();
        var typedSetting = botSettings?.YourStrongTypeSetting;

        // 执行你的自定义逻辑
        return await dc.EndDialogAsync(result: targetSetting, cancellationToken: cancellationToken);
    }
}

// 强类型配置类(和appsettings.json结构对应)
public class BotSettings
{
    public string YourStrongTypeSetting { get; set; }
    // 其他配置属性...
}

3. 注册自定义动作到依赖注入容器

在Composer生成的主Bot项目中(如Program.cs或BotConfiguration.cs),将自定义动作注册到DI容器:

services.AddTransient<MyCustomAction>();

二、解决旧方案的CS0411错误(不推荐)

如果一定要用旧的State读取方式,需补充泛型参数(仅兼容旧版本Composer):

// 指定泛型类型为Dictionary<string, object>
var botSettings = dc.Parent.State.GetValue<Dictionary<string, object>>("settings");
// 再从字典中取值
var settingValue = botSettings["YourSettingKey"];

三、关于跨项目访问Settings的问题

无需修改主项目Settings的访问权限,也不需要引用主项目的命名空间:

  • 主项目的Settings类默认是internal,跨项目引用并非最佳实践
  • 直接通过IConfiguration读取或强类型绑定,无需依赖主项目的内部类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:10:13