如何检查Botframework上的对话框堆栈

时间:2017-04-14 17:48:54

标签: c# botframework

我正在实施一个反馈对话框,并希望使用IScorable从任意位置进入对话框并输入关键字"反馈"并将我的FeedbackDialog推到堆栈上。

在收集用户反馈时,我不想要这种行为。有没有办法确定我的FeedbackDialog是否已经在堆栈中?所以我不小心双推它?

1 个答案:

答案 0 :(得分:4)

您可以像下面这样解决堆栈问题。首先,注册必要的模块:

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]位于堆栈顶部)。您可以使用Target的{​​{1}}属性找到对话框的名称,即Frame。因此,如果存在,请使用以下代码在堆栈中找到stack.Frames[0].Target

FeedbackDialog