Передача данных из моего MainDialog в промежуточное ПО - PullRequest
0 голосов
/ 29 мая 2020

Я использую шаблон виртуального помощника и настраиваемое промежуточное программное обеспечение.

я хочу передать настраиваемые данные в свойствах действия моему промежуточному программному обеспечению из моего MainDialog

 turnContext.Activity.Properties["dummy"] = "data";

Но действие, которое я получаю в промежуточном программном обеспечении, никогда не имеет свойства Properties, оно всегда пустое.

Я знаю, что:

По мере того, как каждое действие входит и выходит бота, каждый компонент промежуточного программного обеспечения может проверять активность или действовать в соответствии с ней как до, так и после запуска логики бота. c.

В моем случае требуется передать данные промежуточному программному обеспечению "после bot logi c работает "

Как я могу это сделать?

1 Ответ

2 голосов
/ 03 июня 2020

Состояние поворота - это TurnContextStateCollection, тип, производный от Dictionary<string, object>. Таким образом, вы можете использовать его как словарь. В SDK данные обычно хранятся в порядке очереди с использованием Add, поскольку SDK записывается только для однократного добавления данных. Если вы попытаетесь использовать Add, когда данные уже присутствуют, это вызовет исключение. Если вы хотите убедиться, что данные присутствуют в состоянии поворота, и вы не знаете, там они уже есть или нет, вы можете использовать Set. Это то же самое, что и использование средства доступа set индексатора:

turnContext.TurnState["dummy"] = "data";

Вы можете получить к нему доступ из промежуточного программного обеспечения, используя Get или снова используя индексатор:

var dummy = turnContext.TurnState["dummy"];

Обратите внимание, что TurnContextStateCollection предоставляет общие c методы для удобства, так что если вы сохраняете только один объект заданного типа в состоянии поворота, вам не нужен ключ для его получения или установки. Ключ генерируется автоматически из имени типа.

turnContext.TurnState.Set(new DummyData());

var dummy = turnContext.TurnState.Get<DummyData>();
...