2016-06-20 80 views
1

我有一個FormDialog有LUIS entities bound to the stateMicrosoft 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; 
} 

有沒有人知道這是可能的?當然,我可以在基類中創建所有屬性,然後在每個擴展它的類中列出哪些實體實際上是可選的。但是這種設計很糟糕,因爲如果要添加新的實體,每個子類都需要更新。

+0

取決於如何從反射中讀取屬性。如果它使用實際的'AbstractFormDialog'類型讀取數據,那麼可能沒有什麼可以做的。如果它獲取基於實例的屬性,則可以改爲創建字段屬性並覆蓋它。除此之外,你可以看看是否檢查屬性也檢查「TypeDescriptor」http://stackoverflow.com/questions/12143650/how-to-add-property-level-attribute-to-the-typedescriptor-at-運行 – TyCobb

回答

1

您也可以利用在運行時現場的API控制這個當你建立你的形式,即 新FormBuilder() 點域(新FieldReflector(nameof(FormDialog1.Entity1)) .SetOptional(假)) 。建立(); 這將使此實例的Entity1字段爲「必需」。