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

ohm*_*ama 1 c# botframework

我正在实现一个反馈对话框,并希望使用IScorableand键将“ feedback”一词从任何地方插入该对话框并将其压入FeedbackDialog堆栈。

从用户收集反馈时,我不希望出现这种情况。有没有办法确定my FeedbackDialog是否已经在堆栈中?所以我不会不小心双按它吗?

OmG*_*OmG 5

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

private void RegisterTypes()
{
    var builder = new ContainerBuilder();
    builder.RegisterModule(new DialogModule());
    builder.RegisterModule(new ReflectionSurrogateModule());
    builder.RegisterModule(new DialogModule_MakeRoot());
    // necessary configurations
    // ...
}
Run Code Online (Sandbox Code Playgroud)

之后,解决堆栈:

using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity))
{
    var stack = scope.Resolve<IDialogStack>();
}
Run Code Online (Sandbox Code Playgroud)

stack.Frames你可以找到在堆栈对话框它们的顺序对话框的列表(stack.Frames[0]就是在堆栈的顶部)。您可以使用的Target属性(Frame即)找到对话框的名称stack.Frames[0].Target。因此,您可以FeedbackDialog使用以下代码在堆栈中找到它(如果存在):

stack.Frames.Any(x=> x.Target.GetType().UnderlyingSystemType.Name == "FeedbackDialog")
Run Code Online (Sandbox Code Playgroud)