如果您需要在bot上下文(未实现IBot
)之外的botframework v4中访问状态,例如控制器,那么如何轻松获得此状态对象?问题在于您无法真正直接注入它,因为它需要使用ChannelId和ConversationId进行初始化。
以下方法可行,但由于我使用TestAdapter
初始化TurnContext
,因此看起来有些奇怪。有没有更好,更明显的方法来掌握状态?
public class SampleController : ControllerBase
{
private readonly MyBotAccessors _botAccessors;
public SampleController(MyBotAccessors botAccessors)
{
_botAccessors = botAccessors;
}
}
public async Task Reset(string conversationKey, string channelId)
{
var turnContext = new TurnContext(new TestAdapter(), new Activity { ChannelId = channelId, Conversation = new ConversationAccount { Id = conversationKey } });
await _botAccessors.MyContextState.SetAsync(turnContext, new MyContextState().Reset());
await _botAccessors.ConversationState.SaveChangesAsync(turnContext);
}