Unity框架和多个构造函数注入

时间:2011-12-29 16:08:19

标签: c# unity-container constructor-injection

我有一个类作为依赖:

public class Foo {
    public Foo() {
        // default constructor
    }

    public Foo(IMyInterface my) {
    }
}

当我尝试将其注入另一个类时,我收到了错误消息

  

依赖项的解析失败...... InvalidOperationException -   当前类型IMyInterface是一个接口,不能   建造。你错过了类型映射吗?

我从未使用任何具体类型注册IMyInterface,因为我将此构造函数保留用于其他目的。

根据我的理解,如果没有明确指示要解决哪个参数,Unity将首先尝试使用最少的参数来解析构造函数。因此它会尝试初始化默认的constroctor。

除了我使用InjectionConstructorAttribute之外,还有一种聪明的方法可以告诉Unity忽略第二个构造函数吗?

2 个答案:

答案 0 :(得分:3)

相反 - Unity将首先尝试使用MOST参数解析构造函数。您可以在一个构造函数上使用InjectionConstructor属性来告诉unity更喜欢这个构造函数而不是其他构造函数。

答案 1 :(得分:2)

您可以在配置中指出应该使用零参数构造函数:

<register type="IFoo" mapTo="Foo">
    <lifetime type="external"/>
    <constructor />
</register>