2017-07-04 186 views
0
[LuisIntent(intentName: "Eligibility")] 
private async Task Eligibility(IDialogContext context, LuisResult result) 
{ 
    await context.PostAsync($"You have chosen the eligibility intent with no entities"); 
    context.Wait(MessageReceivedAsync); 
} 

如何重寫LuisIntent屬性,使其同時使用IntentName和EntityName?LuisIntent屬性如何覆蓋?

+0

對於1個intent和2個實體,你想有2種不同的方法? –

+0

與通常的屬性不同,LuisAttribute不是「密封」的,所以你可以對它進行子類化 - 但是框架不會知道你已經完成了,並且不會將實體傳遞給它。 – stuartd

+0

..無論如何,你已經獲得了'LuisResult'參數中的實體。 – stuartd

回答

1

我相信你想要做的事情可以以一種更簡單的方式完成,假設你想要做的是根據檢測到一個實體(或多個實體)執行不同的邏輯。

您在意向方法中獲得的LuisResult類包含一個Entities屬性,其中包含LUIS根據您的查詢檢測到的實體列表。

如果你仍然想要做過濾覆蓋的事情,那麼我相信你將不得不從頭開始,覆蓋LuisDialogDispatchToIntentHandler方法。該方法負責根據意圖名稱查找意圖處理程序字典,該處理程序需要調用存儲。

但是,這將不夠可能,你將不得不創建一個新的EnumerateHandlers,因爲正如我前面提到的,處理程序字典正在創建,只是意圖名稱作爲密鑰,它似乎你想要合併實體。

最後,您將不得不更新LuisIntentAttribute以合併您要過濾的實體名稱。

正如你所看到的最重要的路徑不是最好的路要走。