나는 재개 쿠키를 사용하여 적극적으로 봇을하고있다.싱글 톤 클래스의 봇 프레임 워크
개체 목록 인 1 개의 싱글 톤 클래스가 있습니다. 나는 싱글 같이 정의 여기서 나는 새로운 대화 매 x 초를 호출 타이머를 가지고있는 RootDialog에서
public class ConversationStarter
{
public static string resumptionCookie;
public static async Task Resume()
{
var message = ResumptionCookie.GZipDeserialize(resumptionCookie).GetMessage();
var client = new ConnectorClient(new Uri(message.ServiceUrl));
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
{
var botData = scope.Resolve<IBotData>();
await botData.LoadAsync(CancellationToken.None);
var task = scope.Resolve<IDialogTask>();
//interrupt the stack
var dialog = new AlarmDialog();
task.Call(dialog.Void<object, IMessageActivity>(), null);
task.PollAsync(CancellationToken.None);
//flush dialog stack
await botData.FlushAsync(CancellationToken.None);
}
}
}
}
:
public static MyObj instance = new MyObj();
public List<Objects> thename = null;
public int count { get; set; }
public static MyObj Instance
{
get
{
return instance;
}
}
는 내가 conversationStarter 클래스가 있습니다. 이 대화 상자에서 내가 할 :
[Serializable]
public class NewDialog : IDialog<object>
{
public Myobj objList;
public async Task StartAsync(IDialogContext context)
{
objList= Myobj.Instance;
PromptDialog.Choice(context, this.AfterSelectOption,
new string[] { "Stay in this survey", "Get back to where I was" },
"Hello, you're in the survey dialog. Please pick one of these options");
}
private async Task AfterSelectOption(IDialogContext context, IAwaitable<string> result)
{
if ((await result) == "Get back to where I was")
{
await context.PostAsync("Great, back to the original conversation!");
context.Done(String.Empty); //Finish this dialog
}
else
{
await context.PostAsync("I'm still on the survey until you tell me to stop");
PromptDialog.Choice(context, this.AfterSelectOption, new string[] { "Stay in this survey", "Get back to where I was" }, "Hello, you're in the survey dialog. Please pick one of these options");
}
}
}
}
나는 내가 다음과 같은 예외 INT의 ConversationStarter 점점 오전 NewDialog으로하여 MyObj의 인스턴스에 액세스하는 경우 :
task.PollAsync(CancellationToken.None);
: 라인에서
Microsoft.Bot.Builder.Internals.Fibers.InvalidNeedException: 'invalid need: expected Wait, have None'
을
내 싱글 톤 클래스에 액세스하려고하지 않으면 모든 것이 원활하게 진행됩니다. 이런 싱글 톤 클래스를 사용할 수 있습니까?
싱글 톤 클래스를 직렬화 할 수 있습니까? –
시리얼 화 가능 – JoaoFilipeClementeMartins
이 샘플을 체크 아웃 한 적이 있습니까? https://github.com/MicrosoftDX/botFramework-proactiveMessages –