Unity中的级联解决方案

时间:2009-06-04 18:00:33

标签: inversion-of-control unity-container

假设我有两种类型,TypeA和TypeB,我想在Unity中注册。 TypeB依赖于TypeA,所以我想通过构造函数注入将TypeA注入到类型B.所以我想写下面的内容,让Unity足够智能,为我级联分辨率:

_container.RegisterType<ITypeA, TypeA>();
_container.RegisterType<ITypeB, TypeB>();

如何告诉Unity解析TypeA并注入TypeB?

如果使用配置文件,看起来这是可能的,但我不知道你会如何编程:

<type name="typeB" type="ITypeB" mapTo="TypeB">
   <lifetime type="Singleton"/>
   <typeConfig extensionType="...">
      <constructor>
        <param name="typeA" parameterType="ITypeA">
           <dependency/>
        </param>
      </constructor>
   </typeConfig>
</type>

提前感谢任何建议!


编辑:所以,Unity确实为我处理了这个问题。但是,我认为我的问题是我有一个包含两个构造函数的类:

public TypeB(TypeA typeA)
{
    _x = typeA;
}

public TypeB() : this(Something.Value)
{
}

Unity似乎无法知道要使用哪个构造函数。第一个构造函数用于单元测试,第二个构造函数用于运行时。 Unity在这方面遇到了麻烦。

1 个答案:

答案 0 :(得分:1)

你这样做:

class TypeA
{
}

class TypeB
{

    [InjectionConstructor]
    public TypeB([Dependency] TypeA typeOfA)
    {

    }
}