如何使用Unity容器通过
XML配置字典?
这有效:
这有效:
<register type="System.Collections.Generic.Dictionary[string,int]" > <constructor> <param name="capacity"> <value value="10" /> </param> </constructor> </register>
但我需要能够在XML配置中添加元素.
解决方法
我相信您发布的配置存在一些问题:
>看起来你正在尝试register an instance而不是register a type mapping.要做到这一点,你需要使用实例元素而不是寄存器元素.
>用于指定泛型类型的语法不正确.要指定字典< string,int>正确的语法应该是:
type =“System.Collections.Generic.Dictionary`2 [[System.String,mscorlib],[System.Int32,mscorlib]],mscorlib”
注意`2将泛型类型指定为具有两个类型参数.
> Specifying a value for your instance是通过设置value属性实现的.这是一个字符串值,必须以某种方式转换为字典的一系列键值对.遗憾的是,这不会发生.您需要编写一个自定义转换器,它将接受一个字符串并创建您的键/值对.可以在here找到这种转换器的示例.
作为最后的注释(和个人偏好),我真的不喜欢使用Unity来创建这种类型的对象.我通常使用自定义配置文件进行任何非平凡的初始化设置,并严格使用Unity来注册依赖注入的类型映射.