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