3

依存関係としてクラスがあります:

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

    public Foo(IMyInterface my) {
    }
}

別のクラスに挿入しようとすると、次のようなエラーメッセージが表示されました。

依存関係の解決に失敗しました......InvalidOperationException-現在のタイプIMyInterfaceはインターフェースであり、構築できません。タイプマッピングがありませんか?

IMyInterfaceこのコンストラクターを他の目的のために予約しているため、具体的な型に登録したことはありません。

私の理解では、Unityは、どちらを解決するかを明確に指示していない場合でも、最初に最小のパラメーターでコンストラクターを解決しようとします。したがって、デフォルトのコンストラクターを初期化しようとします。

私が使用する以外にInjectionConstructorAttribute、Unityに2番目のコンストラクターを無視するように指示できる賢い方法はありますか?

4

2 に答える 2

4

逆です。Unityは最初にMOSTパラメーターを使用してコンストラクターを解決しようとします。コンストラクターの1つで属性を使用InjectionConstructorして、他のコンストラクターよりもこのコンストラクターを優先するようにUnityに指示できます。

于 2011-12-29T16:12:10.180 に答える
2

構成で、ゼロパラメーターコンストラクターを使用する必要があることを指定できます。

<register type="IFoo" mapTo="Foo">
    <lifetime type="external"/>
    <constructor />
</register>
于 2012-05-31T15:57:01.760 に答える