考虑下面的工厂方法,该方法需要一些元数据并创建相关类型的列。C#工厂问题
它的一切都很好,直到遇到依赖于一些附加数据(ColumnType.DropDownList)的列。这需要一些额外的数据(值列表)用于显示目的。
我不想在元数据级别提供此数据,因此在工厂中创建对象时提供此数据似乎是明智的。但我正在努力寻找一种优雅的方式来获得工厂方法的列表(见评论:不能在这里硬编码!)
任何想法?我向任何人开放!
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);
}