2

Unity Configuration を使用してクラス プロパティに依存関係を追加しようとしていますが、注入しようとしている型も汎用的です。「Google」について調べたところ、'1 構文を使用する必要があることがわかりました。Validation Application ブロックに関する 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: MyService 型のプロパティ Validator は IValidator'1 型であり、IValidator'1 型の値を挿入することはできません

どんな助けでも大歓迎です。

4

1 に答える 1

2

この構文を探していると思います:

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

これにより、ジェネリック パラメーターの型が指定され、それを挿入できるようになります。

この機能は十分に文書化されていません:)

于 2009-04-09T20:10:56.110 に答える