我试图在不同的对话框之间传递状态,并且似乎是a)没有正确调用对话框或b)没有正确使用botstate(或两者)。
当我打开第二个对话框时,有人能告诉我我失去了什么吗?它使用context.forward();
打开在messagescontroller中,我可以轻松设置状态;
StateClient stateClient = activity.GetStateClient();
BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);
userData.SetProperty<bool>("SessionActive", true);
await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);
然后我打开一个控制对其他对话框的访问的对话框;
await Conversation.SendAsync(activity, () => new DialogController());
这是一个单独的类;
public class DialogController : IDialog<object>
在此对话框中,我可以访问我设置的值&#39; true&#39; - 这有效;
StateClient stateClient = new StateClient(new Uri(message.ServiceUrl));
BotData userData = await stateClient.BotState.GetUserDataAsync(message.ChannelId, message.From.Id);
userData.GetProperty<bool>("SessionActive")
但是,在此对话框中,我继续打开第二个依赖于状态的对话框;
await context.Forward(new SubDialog(), ThrowOutTask, message, cts.Token);
这也是一个单独的类;
public class SubDialog: IDialog<object>
然而,当我尝试检索“SessionActive”时, state,与以前完全相同,值为false(即第一次实例化)..?
答案 0 :(得分:0)
当您从Dialog类请求状态时,您应该使用上下文来完成。
bool sessionActive = context.UserData.Get<bool>("SessionActive");