在统一注入对象上指定属性

时间:2012-06-24 01:11:03

标签: constructor unity-container code-injection

我在Unity遇到了一个有趣的问题,感谢任何帮助。

我想在构造函数中注入一个对象数组,我希望在注入期间将每个对象与代码相关联。 请注意,可以有多个具有相同代码的对象,因此我不能使用Dictionary。

我基本上是尝试将小对象注入到包含对象中,然后包含对象将在必要时使用代码来访问这些对象。

我可以使用KeyValuePair;如果我必须构造一个复合对象(如下所示),我也会发现。 我不想做的是事先分别注册代码/对象元素的所有组合。我不介意注册每个注入的对象。

我想做这样的事情(我知道它无效):

<register type="IMyObject" mapTo="MySmallObject1" name="SmallObject1" />
<register type="IMyObject" mapTo="MySmallObject2" name="SmallObject2" />
<register type="IMyObject" mapTo="MySmallObject3" name="SmallObject3" />


<register type="ContainingObject1" name="Name1">
  <constructor>
    <param name="objects">
      <array>
        <value>
          <!-- This could resolve to a KeyValuePair or a composite object -->
          <property name="Code" value = "01" />
          <property name="Operation" >
            <dependency name="SmallObject1" />
          </property>
        </value>
        <value>
          <property name="Code" value = "02" />
          <property name="Operation" >
            <dependency name="SmallObject2" />
          </property>
        </value>
      </array>
    </param>
  </constructor>
</register>

<register type="ContainingObject2" name="Name2">
  <constructor>
    <param name="objects">
      <array>
        <value>
          <property name="Code" value = "01" />
          <property name="Operation" >
            <dependency name="SmallObject3" />
          </property>
        </value>
      </array>
    </param>
  </constructor>
</register>

所以在第一个包含的对象中,我注入了两对:代码01和SmallObject1,代码02和SmallObject2。 对于第二个,只有一对:带有SmallObject3的代码01。 我知道我可以编写一个自定义类型转换器,它可以采用“01,SmallObject1”形式的字符串,并通过在代码中解析类型名称将其转换为字符串和对象。 我希望尽可能避免这种情况,并在配置中控制所有这些。

有什么想法吗?

谢谢! 菲尔

0 个答案:

没有答案