新しいWebアプリケーションでNInjectを使用していますが、不明な点が2つあります。
GCがすべてのインスタンスを収集しないようにするために、カーネルアラウンド(セッション/アプリ変数)への参照を保持する必要はありませんか?たとえば、.Using()を指定してから、Kernelオブジェクトが収集された場合、すべての「シングルトン」も収集されませんか?
カーネルオブジェクトへの参照を保持する必要がある場合、WithArguments()に渡される引数を変更できるようにするにはどうすればよいですか、それは不可能です。
カーネルを回したくないのは事実です。通常、Webアプリでは、カーネルをHttpApplicationの静的プロパティに格納します。カーネルへの参照が必要な場合は、IKernelタイプの依存関係を(コンストラクター引数またはプロパティを介して)公開するだけで、Ninjectはそのタイプをアクティブ化したカーネルへの参照を提供します。
バインディングでWithArguments()を使用すると、すべてのアクティベーションに使用されます。 IParametersを使用する場合、それらはそのアクティベーションにのみ使用されます。 (ただし、アクティブ化するサービスがシングルトンのように再利用可能な動作をしている場合は、異なるIParametersを渡しても再アクティブ化されません。)
これは、IoCコンテナの使用を開始する際の一般的な落とし穴です。 この関連する質問 を参照してください。
手短に: