3

私が以下を持っている場合:

public MyClass(IServiceOne serviceOne, IServiceTwo serviceTwo, IServiceThree serviceThree = null)
{
  this.serviceOne = serviceOne;
  this.serviceTwo = serviceTwo;
  this.serviceThree = serviceThree ?? new ServiceThree("some-info");
}

最初の 2 つの引数をバインドするが、IServiceThree 型の引数はバインドしないように Ninject に指示するにはどうすればよいですか? これは可能ですか?

コンストラクター引数として serviceThree が必要な理由は、テスト容易性のためです。テストからモックを挿入できる必要があります。

4

3 に答える 3

5

コンストラクター注入を使用する予定がない場合は、コンストラクターの引数リストから削除して、手動で初期化することもできます。つまり、3 つではなく 2 つの引数を渡すだけです。

更新: できることは、null値を注入することです。私が覚えている限りでは、次のようなことをしなければなりません:

_kernel.Settings.AllowNullInjection = true;

次に、3 番目の引数のバインドが存在する場合は、それを削除できます。

于 2013-03-01T12:07:07.340 に答える
0

テストを容易にするために、null として動作させたいインターフェイスをモックし (メソッドを呼び出すときに何もしない)、コンストラクターのパラメーターとして渡す必要があります。

あなたのやり方は間違っていて、テストコードの依存関係を本番コードに追加しています。

于 2016-10-06T20:05:07.117 に答える