【问题标题】:Map Domain Entity Properties to Word Bookmarks将域实体属性映射到 Word 书签
【发布时间】:2011-08-03 15:07:28
【问题描述】:

我们需要打印带有书签的 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 的属性添加属性。这似乎是混乱和错误的,因为域实体不应该知道所有这些一次性应用程序的需求。

一个想法是创建书签名称到域实体属性的映射。也许创建一个表示书签名称的枚举,然后将属性添加到这些枚举元素中,这些属性表示域实体属性。属性必须指定这些属性,我不知道是否可以这样做。这里可以使用表达式树吗?

还有其他选择吗?我只是想将域实体属性映射到字符串文字。

解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: c# reflection expression-trees custom-attributes


    【解决方案1】:

    我只是这样做了:

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

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多