2

私は(大規模な)プロジェクトでNinjectを使い始めたばかりで、その一部にDIを使用するだけで始めています。コンストラクターインジェクションを広範囲に使用して編成されたサブシステムがあります。Ninjectを使用して、このサブシステムのクラス間のすべての依存関係を注入すると、うまく機能します。ただし、サブシステムの外部に依存しているため、Ninjectを使用して自動的に注入することもできますが、ライフサイクルを担当することはできません。

Bind<T>.ToConstant(...)は自分がやろうとしていることにうまくいくと思いました。たとえば、シングルトンとして機能するタイプのMonkeyのクラスがあるかもしれませんが、アプリケーションの別の部分は、Ninjectなしでそのライフサイクルを処理しています(たとえば、手動で作成して破棄します)。Ninjectを備えたサブシステムが作成されたら、カーネルをインスタンス化し、サブシステムクラスをバインドしてから、次のようなものを使用します。Bind<Monkey>.ToConstant(Monkey.Instance)さまざまな「外部」依存関係にバインドします。これはアクティベーション時にはうまく機能しますが、カーネルを破棄すると必要に応じて機能しません。私のサブシステムは、これらの外部依存関係よりもライフサイクルが短い可能性がありますが、カーネルでDisposeを呼び出すと、これらの依存関係がすべて破棄されます。これは、私が望んでいることではありません。私は両方の方法で引数を見ることができますが、Ninjectが作成しなかったオブジェクトを自動的に破棄することは少し疑わしいようです。少なくともこの動作をオプトアウトする方法があることを望んでいますが、これまでのところ何も見つかりませんでした。これに対するサポートはありますか?

4

1 に答える 1

5

InTransientScope定数オブジェクトに追加します。

于 2012-05-08T17:21:28.147 に答える