1

우리는 범위를 생성하고, 대화 상자 스택을로드하고, 중간에 인터럽트하고, 중단 된 스레드를 실행하는 Proactive 봇 샘플을 이해하려고합니다. 누군가가 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에 입력 된 하나의 활동 만 한 번에 처리 할 수 ​​있습니다. DialogModule.BeginLifetimeScope (Conversation.Container 무슨

1) 하는가

BeginSlifetimeScope 여기에서 찾을 수있다 : github:/Microsoft.Bot.Builder.Autofac/Dialogs/DialogModule.cs#L62 기본적으로,이 선은 봇에 의해 사용되는 서비스의 생성, 범위 및 수명을 제어 autofac를 사용 프레임 워크. autofac lifetime에 대한 자세한 내용은 http://autofaccn.readthedocs.io/en/latest/lifetime/을 참조하십시오.

2) var 스택 = scope.Resolve<IDialogStack>();의 기능은 무엇입니까?

Autofac [0] 여기 참조 등록 IDialogTaskManager.DialogTasks에이 문제를 해결한다 : 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가 호출 될 때 데이터가 저장소에 유지되도록하는 책임이 있습니다.

관련 문제