我的机器人会回答不同的用例。所以我必须为每个用例使用多个类。使用这段代码,我们可以在多个类中编写我们的任务(用 Intents 注释)。
我通过覆盖LuisDialog
下面的处理程序方法找到了解决方案。我Baseform
继承了这个LuisDialog
类。所有其他有意图的类都将继承我的BaseForm
protected override IDictionary<string, IntentActivityHandler> GetHandlersByIntent()
{
var classCollection = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.Where(type => type.IsSubclassOf(typeof(BaseForm)));
List<KeyValuePair<string, IntentActivityHandler>> handler = new List<KeyValuePair<string, IntentActivityHandler>>();
foreach (var item in classCollection)
{
handler.AddRange(MyLuisDialog.EnumerateHandlers(Activator.CreateInstance(item)).ToList());
}
return handler.ToDictionary(kv => kv.Key, kv => kv.Value);
}
在代码中有一个EnumerateHandlers
方法,它只是 Luis Dialog sdk 的一个副本。