Microsoft Bot Framework FormFlow — переопределить атрибут [необязательно]?

У меня есть диалоговое окно FormDialog, в котором есть сущности LUIS, привязанные к состоянию.

public abstract class AbstractFormDialog
{
    [Optional]
    public string Entity1;

    [Optional]
   public string Entity2;

    [Optional]
    public string Entity3;

    [Optional]
    public string Entity4;

    [Optional]
    public string Entity5;
}

В подклассе AbstractFormDialog я хочу иметь возможность сказать, что некоторые из этих сущностей необходимы, чтобы «отсутствие предпочтения» не было вариантом. Что-то типа

public abstract class FormDialog1 : AbstractFormDialog
{
    [Required]
    public string Entity1;

    [Required]
   public string Entity2;
}

Кто-нибудь знает возможно ли это? Конечно, я мог бы сделать все атрибуты обязательными в базовом классе, а затем в каждом классе, который его расширяет, перечислить, какие сущности на самом деле являются необязательными. Однако этот дизайн плох, потому что, если будет добавлена ​​​​новая сущность, каждый подкласс необходимо будет обновить.


person Kah    schedule 20.06.2016    source источник
comment
Зависит от того, как атрибуты считываются из отражения. Если он использует фактический тип AbstractFormDialog для чтения данных, то, вероятно, вы ничего не сможете сделать. Если он получает атрибуты на основе экземпляра, вы можете вместо этого создать свойства своих полей и переопределить их. Помимо этого, вы могли бы видеть, проверяет ли то, что проверяет атрибуты, также проверяет дескриптор TypeDescriptor stackoverflow.com/questions/12143650/   -  person TyCobb    schedule 20.06.2016


Ответы (1)


Вы также можете контролировать это, используя API-интерфейсы полей во время выполнения при создании формы, т. е. new FormBuilder() .Field(new FieldReflector(nameof(FormDialog1.Entity1)) .SetOptional(false)) .Build(); Это сделает поле Entity1 для этого экземпляра обязательным.

person Chris McConnell    schedule 24.06.2016