2016-06-20 3 views
1

У меня есть FormDialog, который имеет LUIS entities bound to the state.Microsoft Bot Framework FormFlow - переопределить атрибут [Необязательный]?

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

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

+0

Зависит от того, как атрибуты считываются из отражения. Если для чтения данных используется фактический тип 'AbstractFormDialog', то, вероятно, вы ничего не сможете сделать. Если он получает атрибуты на основе экземпляра, то вы можете вместо этого создать свои свойства полей и переопределить его. Кроме этого, вы можете увидеть, проверяет ли какие-либо атрибуты атрибуты 'TypeDescriptor' http://stackoverflow.com/questions/12143650/how-to-add-property-level-attribute-to-the-typedescriptor-at- время выполнения – TyCobb

ответ

1

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

Смежные вопросы