我正在尝试映射Unity的通用类型

时间:2009-04-08 09:34:18

标签: c# .net dependency-injection unity-container

我正在尝试使用Unity Configuration向类属性添加依赖项,而我尝试注入的类型也是通用的。我有一个“谷歌”,发现我需要使用'1语法。我正在关注验证应用程序块BUT上David Hayden的教程,而不是通过配置文件以编程方式注册我设置的类型。

<typeAliases>
    <!-- Lifetime manager types -->
    <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager,Microsoft.Practices.Unity" />
    <typeAlias alias="external" type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager,Microsoft.Practices.Unity" />
    <typeAlias alias="IValidator`1" type="MySerivice.IValidator`1,MyService" />
    <typeAlias alias="VABValidator`1" type="MySerivice.VABValidator`1,MyService" />
    <typeAlias alias="MyService" type="MySerivice.MyService,MyService" />
</typeAliases>

然后我在这里注册映射和属性:

<types>    
  <type type="MyService">
    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement Microsoft.Practices.Unity.Configuration">
      <property name="Validator" propertyType="IValidator`1"/>
    </typeConfig>
  </type>
  <type type="IValidator`1" mapTo="VABValidator`1">
    <lifetime type="singleton" />
  </type>
</types>

在MyService中,我有以下属性:

private IValidator<RegExpressionObject> validator;

[Dependency]
public IValidator<RegExpressionObject> Validator
{
    get { return validator; }
    set { validator = value; }
}

当我运行这个时,我得到以下异常,这实际上让我挠头:

  

System.InvalidOperationException:The   属性MyService上的属性Validator   属于IValidator'1类型,不可能   注入了类型的值   IValidator'1

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

我相信你正在寻找这种语法:

<typeAlias alias="VABValidator`1" 
           type="MySerivice.VABValidator`1
                [[Assembly.Namespace.RegExpressionObject,Assembly]],MyService"/>

这将指定您的通用参数的类型,并允许您注入它。

此功能记录不完善:)