2016-11-22 6 views
1

私は、Microsoft Bot FrameworkとAutofacを使用してボットを構築しようとしています。 私は2 の間で共有されるサービスを持っています。ダイアログと最初のダイアログは、ユーザー応答に基づいてもう一方をインスタンス化します。私ダイアログインサイド 私はこの行を呼び出す:context.For autofacを使用する方法

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>>()); 
}; 

をだから私は、私は(私のサービスである)ProductProviderへの参照を維持しながら、私のStepDialogのインスタンスを取得するために類似した何かをしていることを前提としています。

私は最初のダイアログのコンストラクタにスコープを渡すことを考えましたが、これは悪い考えですが、どうすればこのことを知ることができますか?

答えて

3

私がかなりうまく動作しているという考えの1つは、ダイアログファクトリを使用することです。ダイアログにそれを挿入し、それを使って他のダイアログを解決します。

ContosoFlowers sampleには、ダイアログファクトリの基本的な実装があります。いくつかの参照リンク下:

  • ベースDialogFactory
  • ちょうどベースDialogFactoryから継承し、ベースの工場でカバーされていない場合のための新しい方法を追加しているContosoFlowersDialogFactory
  • Hereは、工場やダイアログがAutoFac
  • Hereに登録されているかであるダイアログの工場がこれは間違いなく、それは完璧に動作していない、私の質問に答え、それはですべてを答える
+0

を使用されている方法ですこの質問の範囲:) – r3plica

関連する問題