C# Boframework 链式开关
C# Boframework Chain Switch
问题示例:Image conversation
下面的图片表明我必须在显示答案之前回答问题两次。任何机会,任何人都知道代码中可能有什么问题,我该如何解决?
public IDialog<IntroForm> BuildChain()
{
return Chain
.From(() => FormDialog.FromForm(BuildIntroForm))
.Switch(
new Case<IntroForm, IDialog<IntroForm>>((msg) =>
{
return true; //Debug
}, (ctx, msg) =>
{
return Chain.From(() => FormDialog.FromForm(BuildPCForm));
}),
new DefaultCase<IntroForm, IDialog<IntroForm>>((ctx, msg) =>
{
//Code ...
})
)
.Unwrap()
.PostToUser();
}
private IForm<IntroForm> BuildPCForm()
{
return new FormBuilder<IntroForm>()
.Message("Rozsvítí se nějaké LED, ozve se beeb kód, ozve se zvuk větráčku, jakákoli reakce na spouštěcí tlačítko?") //Czech language
.Build();
}
private IForm<IntroForm> BuildIntroForm()
{
return new FormBuilder<IntroForm>()
.
. //Code ..
.Field(new FieldReflector<IntroForm>(nameof(IntroForm.Problem))
.SetPrompt(
new PromptAttribute(
"Máte problém s ...? {||}"))) //Form from the image
.Build();
}
我找到了解决方案
使用FormDialog.FromForm(BuildPCForm,FormOptions.PromptInStart))
添加FormOptions.PromptInStart
完整代码
public IDialog<IntroForm> BuildChain()
{
return Chain
.From(() => FormDialog.FromForm(BuildIntroForm))
.Switch(
new Case<IntroForm, IDialog<IntroForm>>((msg) =>
{
return true; //Debug
}, (ctx, msg) =>
{
return Chain.From(() => FormDialog.FromForm(BuildPCForm,FormOptions.PromptInStart));
}),
new DefaultCase<IntroForm, IDialog<IntroForm>>((ctx, msg) =>
{
//Code ...
})
)
.Unwrap()
.PostToUser();
}
private IForm<IntroForm> BuildPCForm()
{
return new FormBuilder<IntroForm>()
.Message("Rozsvítí se nějaké LED, ozve se beeb kód, ozve se zvuk větráčku, jakákoli reakce na spouštěcí tlačítko?") //Czech language
.Build();
}
private IForm<IntroForm> BuildIntroForm()
{
return new FormBuilder<IntroForm>()
.
. //Code ..
.Field(new FieldReflector<IntroForm>(nameof(IntroForm.Problem))
.SetPrompt(
new PromptAttribute(
"Máte problém s ...? {||}"))) //Form from the image
.Build();
}
问题示例:Image conversation
下面的图片表明我必须在显示答案之前回答问题两次。任何机会,任何人都知道代码中可能有什么问题,我该如何解决?
public IDialog<IntroForm> BuildChain()
{
return Chain
.From(() => FormDialog.FromForm(BuildIntroForm))
.Switch(
new Case<IntroForm, IDialog<IntroForm>>((msg) =>
{
return true; //Debug
}, (ctx, msg) =>
{
return Chain.From(() => FormDialog.FromForm(BuildPCForm));
}),
new DefaultCase<IntroForm, IDialog<IntroForm>>((ctx, msg) =>
{
//Code ...
})
)
.Unwrap()
.PostToUser();
}
private IForm<IntroForm> BuildPCForm()
{
return new FormBuilder<IntroForm>()
.Message("Rozsvítí se nějaké LED, ozve se beeb kód, ozve se zvuk větráčku, jakákoli reakce na spouštěcí tlačítko?") //Czech language
.Build();
}
private IForm<IntroForm> BuildIntroForm()
{
return new FormBuilder<IntroForm>()
.
. //Code ..
.Field(new FieldReflector<IntroForm>(nameof(IntroForm.Problem))
.SetPrompt(
new PromptAttribute(
"Máte problém s ...? {||}"))) //Form from the image
.Build();
}
我找到了解决方案
使用FormDialog.FromForm(BuildPCForm,FormOptions.PromptInStart))
添加FormOptions.PromptInStart
完整代码
public IDialog<IntroForm> BuildChain()
{
return Chain
.From(() => FormDialog.FromForm(BuildIntroForm))
.Switch(
new Case<IntroForm, IDialog<IntroForm>>((msg) =>
{
return true; //Debug
}, (ctx, msg) =>
{
return Chain.From(() => FormDialog.FromForm(BuildPCForm,FormOptions.PromptInStart));
}),
new DefaultCase<IntroForm, IDialog<IntroForm>>((ctx, msg) =>
{
//Code ...
})
)
.Unwrap()
.PostToUser();
}
private IForm<IntroForm> BuildPCForm()
{
return new FormBuilder<IntroForm>()
.Message("Rozsvítí se nějaké LED, ozve se beeb kód, ozve se zvuk větráčku, jakákoli reakce na spouštěcí tlačítko?") //Czech language
.Build();
}
private IForm<IntroForm> BuildIntroForm()
{
return new FormBuilder<IntroForm>()
.
. //Code ..
.Field(new FieldReflector<IntroForm>(nameof(IntroForm.Problem))
.SetPrompt(
new PromptAttribute(
"Máte problém s ...? {||}"))) //Form from the image
.Build();
}