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>();
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
