我正在实现一个反馈对话框,并且希望使用 IScorable
从任何地方进入该对话框,并关闭“反馈”一词并将我的 FeedbackDialog
推送到堆栈。
我不希望在收集用户反馈时出现这种行为。有没有办法确定我的 FeedbackDialog
是否已经在堆栈上?那么我不会不小心双推它吗?
最佳答案
您可以像下面这样解析堆栈。首先,注册必要的模块:
private void RegisterTypes()
{
var builder = new ContainerBuilder();
builder.RegisterModule(new DialogModule());
builder.RegisterModule(new ReflectionSurrogateModule());
builder.RegisterModule(new DialogModule_MakeRoot());
// necessary configurations
// ...
}
之后,解析堆栈:
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity))
{
var stack = scope.Resolve<IDialogStack>();
}
在stack.Frames
中,您可以按堆栈对话框中的顺序找到对话框列表(stack.Frames[0]
位于对话框的顶部)堆)。您可以使用 Frame
的 Target
属性查找对话框的名称,即 stack.Frames[0].Target
。因此,您可以使用以下代码在堆栈中找到 FeedbackDialog
(如果存在):
stack.Frames.Any(x=> x.Target.GetType().UnderlyingSystemType.Name == "FeedbackDialog")
关于c# - 如何检查 Botframework 上的对话框堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43416604/