Я пытаюсь перенаправить Entities из LuisResults в дочерний диалоговый класс. Может ли кто-нибудь помочь в том, как это сделать?
Диалоговый класс Луиса
...
[LuisIntent("Foo")]
public async Task Foo(IDialogContext context, LuisResult result)
{
var entities = result.Entities;
await context.Forward(new FooDialog(), AfterFooDialog, entities,
CancellationToken.None);
}
...
Класс Фуддиалог
...
public async StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
}
private async Task MessageReceivedAsync(IDialogContext context, List<string> entities, IAwaitable(IMessageActivity) result)
{
var _entites = await entities;
...
}
...
Ответ 1 · рейтинг 1 · Ashwin Kumar
Один из подходов к этому заключается в том, что вы инициализируете объекты в конструкторе FooDialog через. Поэтому передайте сущности FooDialog в конструкторе, пересылая их из LuisDialog.
Таким образом, ваш код будет:
Диалог Луиса
[LuisIntent("Foo")]
public async Task Foo(IDialogContext context, LuisResult result)
{
var entities = result.Entities;
await context.Forward(new FooDialog(entities), AfterFooDialog, entities, CancellationToken.None);
}
И ваш FooDialog
[Serializable]
public class FooDialog : IDialog<object>
{
public IList<EntityRecommendation> _entities { get; set; }
public FooDialog(IList<EntityRecommendation> entities)
{
this._entities = entities;
}
public FooDialog()
{}
public async Task StartAsync(IDialogContext context)
{
context.Wait(this.MessageReceivedAsync);
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result )
{
await context.PostAsync("Entity : " + _entities.First().Entity);
}
}
Итак, теперь у вас есть сущности внутри класса FooDialog, доступные любой функции внутри объекта.