2011-12-29 28 views
3

我有一個類的依賴性:統一框架和多個構造注射

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

    public Foo(IMyInterface my) { 
    } 
} 

當我試圖把它注入另一個類我得到錯誤消息

分辨率依賴的失敗。 ..... InvalidOperationException - 當前類型IMyInterface是一個接口,不能由 構造。你是否缺少類型映射?

我從來沒有使用任何具體類型註冊IMyInterface,因爲我保留這個構造函數用於其他目的。

我的理解Unity會嘗試用最少的參數先解析構造函數,如果沒有明確地指示它解決哪個問題。所以它會嘗試初始化默認的constroctor。

除了我使用InjectionConstructorAttribute之外,有沒有一種巧妙的方法可以讓Unity忽略第二個構造函數?

回答

3

情況正好相反 - Unity會嘗試先用MOST參數解析一個構造函數。你可以在你的一個構造函數上使用InjectionConstructor屬性來告訴unity更喜歡這個構造函數。

+0

謝謝你給我修錯誤的內存。 – hardywang 2011-12-29 16:36:33

2

您可以在配置表明,零參數的構造函數應使用:

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