基于Microsoft bot框架的所有示例都使用通用IDialog
接口作为IDialog<object>
。
此接口的通用目的是什么?通用名称用作out
类型,documentation表示:
[...]可暂停的会话过程,产生的结果 输入TResult
但我找不到任何可以实际使用/演示此结果的地方。关于返回值的唯一演示使用上下文Done<T>()
,它独立于对话框的类型参数。
答案 0 :(得分:0)
事实上,它与context.Done<T>
有关,但是当您在多个对话框的背景下考虑时,它会变得更加清晰。
当您呼叫(或转发传入消息)到新对话框时,您需要指定一个ResumeAfter<T>
方法,该方法基本上是您在呼叫context.Done
时将被呼叫的方法(或context.Fail
)在新对话框中。
context.Call(new NameDialog(), this.NameDialogResumeAfter);
其中NameDialog
定义为:
[Serializable]
public class NameDialog : IDialog<string>
正如您现在可以猜到的,<T>
方法上的ResumeAfter
与对话框中指定的<T>
相关联。因此,如果您的对话框为IDialog<string>
,则您的ResumeAfter<T>
方法将如下所示:
private async Task NameDialogResumeAfter(IDialogContext context, IAwaitable<string> result)
如果在context.Done
中您发送了其他类型,则在执行await
result
时,它可能会失败。
您可以查看以下示例: