将模型和订阅密钥传递给LuisDialog而不是通过属性

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

Bot框架中的LuisDialog像这样初始化(来自Microsoft的例子):

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

但是,我需要使用动态应用程序ID和订阅密钥,具体取决于我确定的用户的语言。

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

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

我可以动态地将应用和订阅密钥传递给LuisDialog而不是硬编码的另一种方式是什么?

您必须在Autofac容器中注册LuisModelAttribute。 您可以在这里看看如何在BotBuilder存储库的AlarmBot示例中完成该操作

我通过稍微改变方法解决了这个问题。 您实际上可以使用两个或更多LuisModel属性来装饰类,并且bot框架将同时查询所有这些属性。