我们需要打印包含书签的Word文档。我们还有域实体,其属性映射到Word文档中的一个(或多个)书签。现在,为了测试,我们有一个switch语句(foo是域实体):
private static string GetValueForBookmark(Bookmark bookmark, Foo foo)
{
// ToDo: Un-switch this.
switch (bookmark.Name)
{
case "dist":
return foo.Measurment.Distance;
case "serialNo":
return foo.SerialNumber;
default:
return string.Empty;
}
}
我不想在框架中向Foo的属性添加属性。这似乎是混乱和错误的,因为域实体不应该知道所有这些一次性应用程序的需求。
一个想法是创建书签名称到域实体属性的映射。也许创建一个表示书签名称的枚举,然后向这些枚举元素添加属性,这些属性表示域实体属性。属性必须指定这些属性,我不知道是否可以这样做。可以在这里使用表达式树吗?
还有其他选择吗?我只想将域实体属性映射到字符串文字。
解决这个问题的最佳方法是什么?
答案 0 :(得分:0)
我刚刚接受了这个:
private static void MapBookmarksToFooProperties()
{
if (_bookmarkToFooPropertyMapping != null) { return; } // We already created the mapping.
_bookmarkToFooPropertyMapping = new Dictionary<string, Func<Foo, string>>();
// Associate Word document bookmarks to their properties within a Foo object.
_bookmarkToFooPropertyMapping.Add("dist", foo => foo.Measurment.Distance);
_bookmarkToFooPropertyMapping.Add("serialNo", foo => foo.SerialNumber);
// More mapping here
}
然后,访问它,就像这样简单:
return _bookmarkToFooPropertyMapping[bookmark.Name](foo);