Considérons la méthode d'usine ci-dessous qui prend quelques méta-données et crée une colonne du type approprié.C# question d'usine
Tout est bon jusqu'à ce que je rencontre une colonne qui repose sur des données supplémentaires (ColumnType.DropDownList). Cela nécessite des données supplémentaires (une liste de valeurs) à des fins d'affichage.
Je ne souhaite pas fournir ces données au niveau des méta-données, ce qui me semble logique lorsqu'un objet est créé en usine. Mais je me bats pour une manière élégante d'obtenir la liste dans la méthode d'usine (VOIR COMMENTAIRE: ne peux pas être HARDCODED ICI!)
Des idées? Je suis ouvert à tout!
public static DetailEditorColumn<int> Create(ColumnMetaData metaData)
{
if (metaData.ColumnType == ColumnType.Rank)
{
return GridColumnBuilder<int>.GetRankColumn(metaData.DisplayOrder, metaData);
}
if (metaData.ColumnType == ColumnType.Decision)
{
return GridColumnBuilder<int>.GetDecisionColumn(metaData.DisplayOrder, metaData);
}
if (metaData.ColumnType == ColumnType.Date)
{
return GridColumnBuilder<int>.GetDateColumn(metaData.DisplayOrder, metaData);
}
if (metaData.ColumnType == ColumnType.DropDownList)
{
// TODO where the humf should this get plugged in!
// cant BE HARDCODED HERE!!!
DropDownList lookupList = new DropDownList()
{
new DropDownListOption() { Id = 1, Value = "Entry 1", ParenTId = null },
new DropDownListOption() { Id = 2, Value = "Entry 1", ParenTId = null },
new DropDownListOption() { Id = 3, Value = "Entry 1", ParenTId = null }
};
return GridColumnBuilder<int>.GetDropDownListColumn(metaData.DisplayOrder, metaData, lookupList);
}
throw new Exception("Column Type Not Supported " + metaData);
}