在v4中的控制器中访问IStatePropertyAccessor botstate

时间:2018-12-05 07:15:10

标签: botframework

如果您需要在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);
}

0 个答案:

没有答案