1

電話する

mActionLogManager = container.Resolve<IActionLogManager>();

デバッグすると、デフォルト以外のctorのみを介して実行されることがわかります

  public ActionLogManager(IUnityContainer container)
        {
            Init(container);
        }

unity常にパラメーターなしの ctor を呼び出すとは限りませんか?

パラメータなしのctorを書き込んで削除しようとしました。

  • それが存在したとき、それはそれを通過しませんでした、

  • 行方不明のときに例外をスローしませんでした。

更新: もしそうなら、ctorに入力するパラメータをどのように知るのですか?

4

2 に答える 2

3

これは Unity のデフォルトの動作です。ほとんどのパラメーターを持つ ctor を使用して、インスタンスを解決しようとします。デフォルトの ctor を使用するように Unity に指示する場合は、次のようにタイプを登録する必要があります。

container.Register<IActionLogManager,MyActionLogManager>(new InjectionConstructor());
于 2012-05-30T06:20:26.230 に答える
2

複数のコンストラクターを選択すると、Unity は最も多くのパラメーターを持つコンストラクターを呼び出し、最も豊富なサービス セットを提供します。[InjectionConstructor]オーバーライドする場合は、呼び出したいコンストラクターに属性を追加します。

MSDNから:

ターゲット クラスに複数のコンストラクターが含まれている場合、Unity は InjectionConstructor 属性が適用されたコンストラクターを使用します。複数のコンストラクターがあり、どれも InjectionConstructor 属性を持たない場合、Unity はパラメーターが最も多いコンストラクターを使用します。同じ数のパラメーターを持つ「最長」のコンストラクターが複数ある場合、Unity は例外を発生させます。

于 2012-05-30T06:19:06.997 に答える