如何使用 context.Forward 和 autofac

How to use context.Forward with autofac

我正在尝试使用 Microsoft Bot Framework 和 Autofac 构建一个机器人。 我有一个在 2 Dialogs 之间共享的服务,第一个 Dialog 根据用户响应实例化另一个。 在我的 Dialog 中,我调用了这一行:

await context.Forward(new StepDialog(_productProvider, _groups, _products,  0), ResumeAfter, new Activity { Text = category }, CancellationToken.None);

但我认为这是不对的。在我的控制器中,我这样做:

// Create our scope
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, model))
{

    // Create our conversation
    await Conversation.SendAsync(model, () => scope.Resolve<IDialog<object>>());
};

所以我假设我必须做一些类似的事情来获取我的 StepDialog 的实例,同时保持对 ProductProvider 的引用(这是我的服务)。

我考虑过将作用域传递到初始 Dialog 的构造函数中,但我读到这是个坏主意,那么我该怎么做呢?

我看到一个工作得很好的想法是使用对话框工厂;所以你将它注入到你的对话框中并用它来解决其他对话框。

ContosoFlowers sample 中,您将找到对话框工厂的基本实现。下面是一些参考链接:

  • 基地DialogFactory
  • ContosoFlowersDialogFactory只是继承了基础DialogFactory,并为基础工厂未涵盖的情况添加了一个新方法。
  • Here 是在 AutoFac 中注册工厂和对话框的方式
  • Here 对话框工厂的使用方式