将数据从我的MainDialog传递到中间件。

问题描述 投票:0回答:1

我正在使用虚拟助理模板,并使用自定义的middelwares。

我想从我的MainDialog中将活动属性中的自定义数据传递给我的中间件。

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

但我在中间件中接收到的activity从来没有设置过Properties属性,总是空的。

我知道这一点。

当每个活动进出机器人的时候 每个中间件都可以在机器人逻辑运行之前和之后 检查或处理这些活动。

我的情况是需要在 "机器人逻辑运行后 "将数据传递给中间件,如何做到这一点?

c# botframework
1个回答
2
投票

转动状态是一个 TurnContextStateCollection 的类型,该类型源自于 Dictionary<string, object>. 因此,你可以像使用字典一样使用它。在SDK中,数据通常是以轮流状态存储,使用 Add 因为SDK被写成只添加一次数据。如果你尝试使用 Add 当数据已经存在时,它将抛出一个异常。如果你想确保数据在转折状态下是存在的,而你又不知道它是否已经存在,你可以使用 Set. 这和使用索引器的set访问器是一样的。

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

你可以从你的中间件访问它,使用 Get 或再次使用索引器。

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

注意 TurnContextStateCollection 为方便起见,提供了通用方法,所以如果你只在你的回合状态中存储一个给定类型的对象,那么你不需要一个键来获取或设置它。密钥是由类型的名称自动生成的。

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

var dummy = turnContext.TurnState.Get<DummyData>();
© www.soinside.com 2019 - 2024. All rights reserved.