C# 如何注入;“类型”;通过统一XML配置
我的类结构如下所示:C# 如何注入;“类型”;通过统一XML配置,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,我的类结构如下所示: public class Processor : IRegister { public Processor(IRequiredDependency dependency) { } public Type[] ObjectTypes { get; set; } } public class TextFile {} public class ImageFile {} <type type="SomeNamespace.IRegister
public class Processor : IRegister
{
public Processor(IRequiredDependency dependency)
{
}
public Type[] ObjectTypes { get; set; }
}
public class TextFile
{}
public class ImageFile
{}
<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>
我们在应用程序中使用设计时统一配置(基于XML)。我想为ObjectTypes
注入值。我有如下XML配置:
public class Processor : IRegister
{
public Processor(IRequiredDependency dependency)
{
}
public Type[] ObjectTypes { get; set; }
}
public class TextFile
{}
public class ImageFile
{}
<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>
我希望unity能够翻译“SomeOtherNameSpace.TextFile,SomeOtherBinary
”,它只不过是“FullyQualifiedClassName,AssemblyName
”。但我得到了以下错误:
TypeConverter
无法从System.String
转换
看来我遗漏了什么。好的,这对我有点帮助。我在
中缺少typeConverter属性。默认类型转换器无法从字符串
转换为类型
。我必须编写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>