1

私はスコープを作成し、ダイアログスタックをロードし、その間で中断し、中断したものを実行するプロアクティブなボットサンプルを理解しようとしています。 Dependency Injectionのスコープについて教えてください。私は 依存性注入に新しいとC#のAutofacです。Microsoft Bot Framework C#のDialogModule.BeginLifeTimeScopeとは何ですか?

1)DialogModule.BeginLifetimeScope(Conversation.Containerは何をしますか?

2)var stack = scope.Resolve<IDialogStack>();は何をしますか?

3)await stack.PollAsync(CancellationToken.None);は何をしますか?

4)await botData.FlushAsync(CancellationToken.None);は何をしていますか?

// Create a scope that can be used to work with state from bot framework. 
    using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message)) 
    { 
     var botData = scope.Resolve<IBotData>(); 
     await botData.LoadAsync(CancellationToken.None); 

     // This is the dialog stack. 
     var stack = scope.Resolve<IDialogStack>(); 

     // Create the new dialog and add it to the stack. 
     var dialog =new SurveyDialog(); 
     stack.Call(dialog.Void<object, IMessageActivity>(), null); 
     await stack.PollAsync(CancellationToken.None); 

     // Flush the dialog stack back to its state store. 
     await botData.FlushAsync(CancellationToken.None);   
    } 
+0

あなたは[this](https://autofac.readthedocs.io/en/latest/lifetime/index.html)を読んでいましたか? – Steven

+0

私はこれを通過しましたが、それを得ていませんでした。私の4つの質問を説明してください。@Steven –

+0

申し訳ありませんが、私はBotフレームワークに精通していません。 – Steven

答えて

1

範囲は可視性と寿命に関係します。マルチスレッドアプリケーションでは、スレッド間で使用できるオブジェクトや、処理が完了したときに廃棄されるべきオブジェクトがあります。ボットフレームワークsdkは、複数のメッセージを一度に処理することを可能にします。ボットビルダがメッセージを処理するために使用するオブジェクトの一部は対話IDにスコープされ、対話IDをキーとするアクティビティは一度に1つしか処理できません。 DialogModule.BeginLifetimeScope(Conversation.Containerは何を

1)を行いん

BeginSlifetimeScopeは、ここで見つけることができます:?github:/Microsoft.Bot.Builder.Autofac/Dialogs/DialogModule.cs#L62基本的には、この行はボットが使用するサービスの創造、範囲、および寿命を制御するためにautofacを使用していますフレームワーク。オートファックライフタイムの詳細については、http://autofaccn.readthedocs.io/en/latest/lifetime/を参照してください。とは何ですか?2)var stack = scope.Resolve<IDialogStack>();とは何ですか?

Autofacが登録さIDialogTaskManager.DialogTasksにこれを解決します[0]ここを参照してください: github:/Microsoft.Bot.Builder.Autofac/Dialogs/DialogModule.cs#L223

3)stack.PollAsync(CancellationToken.None)待つん何。行う?

これはIEventLoopの内部BotFrameworkメソッドです。この実装は(DialogTaskの)ここにあります:github:/Microsoft.Bot.Builder/Dialogs/DialogTask.cs#L308このメソッドは、ボットフレームワークの内部イベントシステム内での作業の処理に関連しています。

4)botData.FlushAsync(CancellationToken.None)を待機しています。行う?

IBotData実装は、.FlushAsyncが呼び出されたときにデータがストアに保持されるようにします。

関連する問題