我正在实施一个反馈对话框,并希望使用IScorable
从任意位置进入对话框并输入关键字"反馈"并将我的FeedbackDialog
推到堆栈上。
在收集用户反馈时,我不想要这种行为。有没有办法确定我的FeedbackDialog
是否已经在堆栈中?所以我不小心双推它?
答案 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