Я хочу получить доступ к userData из формы FormFlow. Единственный способ, которым я смог это сделать, - создать статический объект контекста в моем классе FormFlow public static IDialogContext context { get; set; }
, как показано ниже.BotFramework Доступ к userData в потоке формы
public static IDialogContext context { get; set; }
public static IForm<Reservation> BuildForm()
{
string userName = String.Empty;
context.UserData.TryGetValue<string>("Name", out userName);
return new FormBuilder<Reservation>()
.Field(new FieldReflector<Reservation>(nameof(Reservation.Name))
.SetActive((state) =>
{
//StateClient stateClient = activity.GetStateClient();
//BotData userData = stateClient.BotState.GetUserDataAsync(activity.ChannelId, activity.From.Id);
state.Name = userName;
return String.IsNullOrEmpty(state.Name);
Тогда в моем RootDialog я установил его, прежде чем я позвоню форме.
case ReservationOption:
ReservationForm.context = context;
context.Call(FormDialog.FromForm<Reservation>(ReservationForm.BuildForm,
FormOptions.PromptInStart), this.ReservationFormComplete);
break;
Есть ли лучший способ сделать это?
Отлично, я просто думал об этой же проблеме! –