我试图理解Microsoft Bot Framework for C#中的Dialog Chaining。
当我说“1”时它会返回“说1”两次,当我说“2”时它会返回“说2”两次等等。我不明白为什么这会返回两次值。我还注意到,如果在Test中设置了断点,它将永远不会被击中。什么是我不了解Dialog链?我已经查看了SimpleFacebookAuth example。
我有一个简单的类TestDialog。 在MessagesController.cs中,我将其实例化为:
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
await Conversation.SendAsync(activity, () => TestDialog.dialog);
}
}
这是TestDialog.cs
public class TestDialog : IDialog<string>
{
public static readonly IDialog<string> dialog = Chain
.PostToChain()
.Switch(
new Case<IMessageActivity, IDialog<string>>((msg) =>
{
var regex = new Regex("^1", RegexOptions.IgnoreCase);
return regex.IsMatch(msg.Text);
}, (ctx, msg) =>
{
return Chain.Return("said 1");
}),
new Case<IMessageActivity, IDialog<string>>((msg) =>
{
var regex = new Regex("^2", RegexOptions.IgnoreCase);
return regex.IsMatch(msg.Text);
}, (ctx, msg) =>
{
return Chain.Return("said 2");
}),
new DefaultCase<IMessageActivity, IDialog<string>>((ctx, msg) =>
{
return Chain.Return("default");
})
).Unwrap().PostToUser();
public async Task StartAsync(IDialogContext context)
{
await Test(context);
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
await Test(context);
}
private async Task Test(IDialogContext context)
{
if (true)
{
context.Wait(MessageReceivedAsync);
}
else
{
context.Done("done");
}
}
}
有没有人经历过这个?