Я использую BotBuilder SDK v4.Вот объяснение ниже (игнорируя некоторый дополнительный код).
На моем боте OnTurnAsync
Я вызываю один из моих диалогов следующим образом:
public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
{
var state = await _accessors.TurnStateAccessor.GetAsync(turnContext, () => new TurnState()).ConfigureAwait(false);
var dialogContext = await _dialogs.CreateContextAsync(turnContext).ConfigureAwait(false);
await dialogContext.BeginDialogAsync(nameof(SomeDialog)).ConfigureAwait(false);
//remaining code..
}
Вызов успешен, и он достигаетдиалог.Ниже приведен код.
public override Task<DialogTurnResult> BeginDialogAsync(DialogContext outerDc, object options = null, CancellationToken cancellationToken = default(CancellationToken))
{
outerDc.ContinueDialogAsync();
return base.BeginDialogAsync(outerDc, options, cancellationToken);
}
public override Task<DialogTurnResult> ContinueDialogAsync(DialogContext outerDc, CancellationToken cancellationToken = default(CancellationToken))
{
var turnState = outerDc.Context.TurnState["ConversationState"]; //access turn state here
outerDc.EndDialogAsync();
return base.ContinueDialogAsync(outerDc, cancellationToken);
}
Внутри ContinueDialogAsync
Я пытаюсь получить доступ к объекту контекста диалога outerDc
, который содержит данные о состоянии моего бота, как я настроил и вижу в окне немедленного просмотра.
outerDc.Context.TurnState Count = 3
[0]: {[BotIdentity, System.Security.Claims.ClaimsIdentity]}
[1]: {[Microsoft.Bot.Connector.IConnectorClient, Microsoft.Bot.Connector.ConnectorClient]}
[2]: {[ConversationState, Microsoft.Bot.Builder.BotState+CachedBotState]} outerDc.Context.TurnState["ConversationState"] {Microsoft.Bot.Builder.BotState.CachedBotState}
Hash: "{}"
State: Count = 2
Вот выражение QuickWatch, и выделенное значение как раз то, что мне нужно.
Когда я пытаюсь использоватьвыражение ((Microsoft.Bot.Builder.BotState.CachedBotState)outerDc.Context.TurnState["ConversationState"]).State
в моем коде, кажется, CachedBotState
не является частью пространства имен / пакета.Также кажется, что Microsoft.Bot.Builder.BotState.CachedBotState
является частью пакета Microsoft.Bot.Builder.Core
nuget, который все еще находится на стадии предварительного просмотра.
Я знаю, что могу передать объект TurnState
в качестве дополнительного параметра из OnTurnAsync
моемудиалог.Но я хочу получить к нему доступ через контекст диалога, когда он показывает, что он уже там.Есть ли способ сделать это?
Пожалуйста, дайте мне знать, если я могу уточнить подробнее.