通过属性以外的方式将模型和订阅密钥传递给 LuisDialog

Passing model and subscription key to a LuisDialog other than via an attribute

我正在编写一个可以说两种语言的机器人。因此,我需要使用两个单独的 LUIS 应用程序(每种语言一个)。

Bot Framework中的LuisDialog是这样初始化的(例子来自微软):

[LuisModel("c413b2ef-382c-45bd-8ff0-f76d60e2a821", "6d0966209c6e4f6b835ce34492f3e6d9")]
[Serializable]
public class SimpleAlarmDialog : LuisDialog<object>
{

但是,我需要根据我确定的用户语言使用动态应用程序 ID 和订阅密钥。

两个 LUIS 应用中的所有方法、意图等都是相同的。

C# 中的属性不能是动态的。

还有什么方法可以动态地将应用程序和订阅密钥传递给 LuisDialog 而不是对它们进行硬编码?

您必须在 Autofac 容器中注册您的 LuisModelAttribute。您可以 here 查看 BotBuilder 存储库中的 AlarmBot 示例是如何完成的

我通过稍微改变方法解决了这个问题。您实际上可以用两个或更多 LuisModel 属性修饰 class,机器人框架将同时查询所有这些属性。