我想在C#中的firstRun创建中间件和不能似乎得到它来保存数据。由于上下文不存在于中间件,我使用下面的语法来保存数据。它不仅救不了,但我想知道以下几点:
为什么,当我保存在一个正常的对话做我访问的SetValue并在这里我只需要访问的SetProperty?
public class FirstRunActivityLogger : IActivityLogger
{
public async Task LogAsync(IActivity activity)
{
var allActivity = (Activity)activity;
StateClient stateClient = allActivity.GetStateClient();
BotData userData = await stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);
if (!userData.GetProperty<bool>("FirstRun"))
{
Debug.WriteLine($"From:{activity.From.Id} - To:{activity.Recipient.Id} - Message:{activity.AsMessageActivity()?.Text}");
userData.SetProperty<bool>("FirstRun", true);
}
}
}
只要记住,userData
只是一个对象并调用SetProperty()
简单地设置一个对象的属性,但不保存任何东西。所以,为了节约您应该使用SetUserDataAsync()
和传球,改变userData
它的机器人状态。 Here是如何做到这一点:
await stateClient.BotState.SetUserDataAsync(activity.ChannelId, activity.From.Id, userData);