4

我有一个包含属性的对象:

public Dictionary<string, Dictionary<string, List<ContextMenuItemModel>>> ContextMenuModel { get; set; }

如何使用 Spring.Net 配置此属性?

4

1 回答 1

6

好吧,在 xml 中配置它并不漂亮,考虑切换到 Spring.Net 代码配置以在 C# 中配置你的 spring 上下文

无论如何,要在 xml 中执行此操作,您需要使用通用 .net 集合的构造函数。例如,List<T>采用IList<T>构造函数,因此您可以配置字符串列表,如下所示:

<object id="list1" type="System.Collections.Generic.List&lt;string>">
  <constructor-arg>
    <list element-type="string">
      <value>abc</value> 
      <value>def</value> 
    </list>
  </constructor-arg>
</object>

请注意,在 xml 中您必须使用&lt;,因为 using<不是合法的 xml。Spring.net 文档中讨论了设置通用集合值。

可以以类似的方式配置泛型Dictionary<string, System.Collections.Generic.List<string>>,这也在此答案中进行了讨论:

<object id="dic1" type="System.Collections.Generic.Dictionary&lt;string, System.Collections.Generic.List&lt;string>>">
  <constructor-arg>
    <dictionary key-type="string" value-type="System.Collections.Generic.List&lt;string>">
      <entry key="keyToList1" value-ref="list1" />
      <entry key="keyToList2" value-ref="list2" /> 
    </dictionary>
  </constructor-arg>
</object>

你可能会看到下一个即将到来:

<object id="dic0" type="System.Collections.Generic.Dictionary&lt;string, System.Collections.Generic.Dictionary&lt;string, System.Collections.Generic.List&lt;string>>>">
  <constructor-arg>
    <dictionary key-type="string" value-type="System.Collections.Generic.Dictionary&lt;string, System.Collections.Generic.List&lt;string>>">
      <entry key="keyToDic1 " value-ref="dic1" />
    </dictionary>
  </constructor-arg>  
</object>

可以注入的:

<object id="MyObject" type="MyNamespace.MyClass, MyAssembly">
  <property name="ContextMenuModel" ref="dic0" />
</object>

这不是很漂亮,但是您可以使用 type aliases 稍微提高 xml 的可读性

于 2012-04-22T08:37:12.087 回答