48

新しい Web アプリケーションで NInject を使用していますが、不明な点が 2 つあります。

  1. GC がすべてのインスタンスを収集しないようにするために、カーネル (セッション/アプリ変数) への参照を保持する必要はありませんか? たとえば、.Using() を指定して Kernel オブジェクトが収集された場合、すべての「シングルトン」も収集されませんか?

  2. Kernel オブジェクトへの参照を維持する必要がある場合、WithArguments() に渡された引数を変更できるようにするにはどうすればよいですか、またはそれは不可能です。

4

3 に答える 3

29

カーネルを渡したくないのは事実です。通常、Web アプリでは、カーネルを HttpApplication の静的プロパティに格納します。カーネルへの参照が必要な場合は、IKernel 型の依存関係を (コンストラクター引数またはプロパティを介して) 公開するだけで、Ninject はその型をアクティブ化したカーネルへの参照を提供します。

バインディングで WithArguments() を使用すると、すべてのアクティベーションに使用されます。IParameters を使用する場合、それらはそのアクティブ化にのみ使用されます。(ただし、有効化しているサービスが Singleton のように再利用可能な動作をしている場合は、別の IParameters を渡しても再有効化されません。)

于 2009-02-26T16:39:08.747 に答える
-4

Mark Seeman -- Manning Dependency Injectionの著者ハリウッドの原則を使用することを提案する代わりに私たち (IOC フレームワーク) と呼ばないでください。要求に応じてインスタンス化されました.. wat nateが言及したように

.. Web アプリケーションの場合、コンポジション ルートは Global.asax ファイルであり、スタートアップ イベントのオーバーライドを使用できます。そこで、Ninject をバインドしてコンポーネントを解決できます。

于 2011-03-22T04:21:23.993 に答える