在子对象中向词典添加条目

时间:2013-09-05 10:55:33

标签: spring configuration configuration-files spring.net

如何从子对象添加条目到父对象中定义的字典?

*的修订版 我编辑我的配置如下:

<object id="ParentType" singleton="false" type="SomeType">
  <property name="FieldNameMap">
   <dictionary key-type="string"  value-type="string" >
     <entry key="Title" value="TitleName"/>     
    </dictionary>
  </property>
</object>

<object id="ChildType" singleton="false" type="SomeType" parent="ParentType">
  <property name="FieldNameMap">
   <dictionary merge="true">
     <!-- this entry should be added to, not replace the whole Dictionary -->
     <entry key="Position" value="PositionName"/>     
    </dictionary>
  </property>
</object>

但不幸的是,它现在抛出强制转换异常:

  

无法转换类型的属性值   [System.Collections.Specialized.HybridDictionary]到必需的类型   [System.Collections.Generic.IDictionary`2 [[System.String,   ],[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,   公钥= b77a5c561934e089]]

1 个答案:

答案 0 :(得分:1)

我自己没有尝试过,但according to the docs,如果集合本身作为只读属性公开,spring.net将使用集合的Add方法添加项目。

因此可以使用object definition inheritance来实现您描述的行为。配置将类似于:

<object id="ParentType" singleton="false" type="SomeType"
        abstract="true">
  <property name="FieldNameMap">
   <dictionary>
     <entry key="Title" value="TitleName"/>     
    </dictionary>
  </property>
</object>

<object id="ChildType" singleton="false" type="SomeType" 
        parent="ParentType">
  <property name="FieldNameMap">
   <dictionary>
     <!-- this entry should be added to, not replace the whole Dictionary -->
     <entry key="Position" value="PositionName"/>     
    </dictionary>
  </property>
</object>

仅当FieldNameMap是只读属性时才会有效。