2017-05-19 5 views
1

나는 폼 빌더 클래스로 리다이렉트하는 LUIS Dialog 클래스를 가지고 있는데, 나는 formbuilder 메소드에 context.Activity를 전달하고 다른 클래스에 상주한다. 코드를 작성한 후 어떻게해야합니까? 그럼 당신은 lambda 표현을 사용할 수 있습니다봇 프레임 워크에서 formbuilder 클래스에 액티비티를 전달하는 방법

public static IForm<FlightBooking> BuildForm(IDialogContext context) 
{} 

:

public class LUISManager : LuisDialog<object> 
{ 
    [LuisIntent("BookFlight")] 
    public async Task BookFlight(IDialogContext context, LuisResult result) 
    {  
     //context.Activity  
     FlightBooking cb = new FlightBooking(); 
     BuildFormDelegate<FlightBooking> MakeFlightBookingForm = FlightBooking.BuildForm; 
     var flightBooking = new FormDialog<FlightBooking>(cb, MakeFlightBookingForm, FormOptions.PromptInStart, null); 
     context.Call<FlightBooking>(flightBooking, FlightBookingComplete); 
    } 
} 

[Serializable] 
public class FlightBooking 
{ 
public static IForm<FlightBooking> BuildForm() 
{ 
    return new FormBuilder<FlightBooking>().Message("Tell me meeting details!") 
    .Field(nameof(title)) 
    .Field(nameof(StartDate))//, validate: ValidateStartDate 
    .Field(nameof(EntryTime), validate:ValidateCallTime) 
    .Build(); 
} 
}, 

나는 우리가 BuildForm 방법에서 "IDialogContext 컨텍스트"매개 변수를 전달할 수 있습니다 알고 있지만 어떻게

답변

0

변경합니다 BuildFormDelegate에서의 생성자를 전달하는 :

BuildFormDelegate<FlightBooking> MakeFlightBookingForm =()=>FlightBooking.BuildForm(context); 
+0

더 많은 시나리오가 있습니까? 위의 코드를 문제없이 테스트했습니다. –

+0

안녕하세요 Eric Dahlvang, FormBuilder에 컨텍스트 매개 변수가있는 코드를 테스트 해 보셨습니까? 내가 잘못 했어. 내 호에 다른 게시물을 추가했습니다. 잠시 살펴볼 수 있습니까? https://stackoverflow.com/questions/45077629/exception-in-bot-framework-application-in-a-formbuilder-cannot-serialize-deleg/45111955?noredirect=1#comment77242996_45111955 –