我的课程结构如下:
public class Processor : IRegister
{
public Processor(IRequiredDependency dependency)
{
}
public Type[] ObjectTypes { get; set; }
}
public class TextFile
{}
public class ImageFile
{}
我们为我们的应用程序使用设计时统一配置(基于XML)。我想为ObjectTypes
注入价值。我的XML配置如下:
<type type="SomeNamespace.IRegister, SomeBinary"
mapTo="SomeNamespace.Processor, SomeOtherBinary"
name="MyProcessor">
<property name="ObjectTypes">
<array>
<value value="SomeOtherNameSpace.TextFile, SomeOtherBinary"/>
<value value="SomeOtherNameSpace.ImageFile, SomeOtherBinary"/>
</array>
</property>
</type>
我期待团结能够翻译&#34; SomeOtherNameSpace.TextFile, SomeOtherBinary
&#34;这只是&#34; FullyQualifiedClassName, AssemblyName
&#34;。但是我收到了以下错误:
TypeConverter
无法转换为System.String
。
看起来我错过了什么。
答案 0 :(得分:0)
好的,这个documentation对我有所帮助。我错过了<value>
中的typeConverter属性。默认类型转换器无法从string
转换为Type
。我不得不写TypeConverter来支持这个。
更新的XML配置现在看起来像:
<unity>
<alias alias="MyTypeConverter" type="Namespace.MyTypeConverter, MyBinary" />
<containers>
<container>
type type="SomeNamespace.IRegister, SomeBinary"
mapTo="SomeNamespace.Processor, SomeOtherBinary"
name="MyProcessor">
<property name="ObjectTypes">
<array>
<value value="SomeOtherNameSpace.TextFile, SomeOtherBinary" typeConveter="MyTypeConverter"/>
<value value="SomeOtherNameSpace.ImageFile, SomeOtherBinary" typeConveter="MyTypeConverter"/>
</array>
</property>
</type>
注意:我必须添加TypeConverter实现,它简单如下:
public class MyTypeConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
return sourceType == typeof(string);
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
return Type.GetType(value.ToString());
}