2
我試圖在不同的對話框之間傳遞狀態,似乎是a)不正確調用對話框或b)不正確使用botstate(或兩者)。Bot框架 - 對話框之間的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>
在這個對話框中,我可以訪問我設置爲'true'的值 - 這可以工作;
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」狀態,在完全相同的方式,該值爲false(即它的實例化的第一次)..?
工作時使用UserData.SetValue,非常感謝。 – Taylor