Это из-за вашей строки: DialogContext dc = null
.
Это должно быть: var dc = await Dialogs.CreateContextAsync(turnContext);
Обратите внимание, что Dialogs
может потребоваться заменить на то, что вы определили как DialogSet
с.Есть несколько разных способов сделать это, но вот верхняя часть моего <myBot>.cs
класса, который я использовал для тестирования вашего предыдущего выпуска:
public class QuickTestBot_CSharpBot : IBot
{
private readonly IStatePropertyAccessor<DialogState> _dialogStateAccessor;
private readonly ConversationState _conversationState;
public QuickTestBot_CSharpBot(ConversationState conversationState)
{
_conversationState = conversationState ?? throw new ArgumentNullException(nameof(conversationState));
_dialogStateAccessor = _conversationState.CreateProperty<DialogState>(nameof(DialogState));
Dialogs = new DialogSet(_dialogStateAccessor);
Dialogs.Add(new QuickDialog());
}
private DialogSet Dialogs { get; set; }
public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
{
var activity = turnContext.Activity;
var dc = await Dialogs.CreateContextAsync(turnContext);
if (string.IsNullOrWhiteSpace(activity.Text))
{
activity.Text = JsonConvert.SerializeObject(activity.Value);
}
[...]
Вот несколько ссылок на несколько хороших примеров, которые также используют WaterfallДиалоги, так что вы можете видеть, как они настраивают свой класс <bot>.cs
(обратите внимание, что они не получают информацию от адаптивных карт ... это просто, чтобы помочь вам настроить диалог водопада и OnTurnAsync
):
- MultiTurnPromptsBot
- CardsBot
- BasicBot