c# – 如何解决Bot Framework MessagesController中的当前对话框
在我的Messages控制器中,我想检查传入消息的堆栈中是否有某个对话框,然后再将其分配给对话框,以便我可以抑制某些条件行为.我尝试按照
this answer解析IDialogStack,如下所示:
public async Task<HttpResponseMessage> Post([FromBody] Activity incomingMessage) { try { if (incomingMessage.Type == ActivityTypes.Message) { using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container,activity)) { var stack = scope.Resolve<IDialogStack>(); } ... 这是在我的Global.asax中注册的模块: private void RegisterBotModules() { var builder = new ContainerBuilder(); builder.RegisterModule(new DialogModule()); builder.RegisterModule(new ReflectionSurrogateModule()); builder.RegisterModule(new DialogModule_MakeRoot()); builder.RegisterModule<GlobalMessageHandler>(); builder.RegisterModule(new AzureModule(Assembly.GetExecutingAssembly())); var store = new TableBotDataStore(/*connection string*/); builder.Register(c => store) .Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore) .AsSelf() .SingleInstance(); builder.Register(c => new CachingBotDataStore(store,CachingBotDataStoreConsistencyPolicy.ETagBasedConsistency)) .As<IBotDataStore<BotData>>() .AsSelf() .InstancePerLifetimeScope(); builder.Update(Conversation.Container); var config = GlobalConfiguration.Configuration; config.DependencyResolver = new AutofacWebApiDependencyResolver(Conversation.Container); } 但是,我得到以下例外:
内部异常:
链接答案中的建议是否已弃用?我缺少一些模块注册吗?我会很感激任何方向! 解决方法
在解析IDialogStack之前,需要在范围内加载BotData.
请尝试以下方法: using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container,activity)) { var botData = scope.Resolve<IBotData>(); await botData.LoadAsync(new System.Threading.CancellationToken()); var stack = scope.Resolve<IDialogStack>(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |