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>