2009-05-20 26 views

答えて

4

私は一般的にノーと言います。依存性注入の性質は、注入されたオブジェクトが注入されたもののライフサイクルをあまり知らないことを意味します。これはある程度注射の定義です。そういうわけで、私は注入されたオブジェクトが注射されたものを処分するとは思わない。注入コードは注入している全てのオブジェクトの完全なライフサイクルを知る責任を負うべきであり、それらに対するすべての操作が完了したときであっても、以前からではなく、それらを適切に処分できなければならない。

1

私はそれが本当に主観的になると思います。

これは、すべてのオブジェクトAの寿命を制御する必要があります誰に煮詰めるでしょうか?インスタンスオブジェクトCとDのため

言っても、オブジェクトAは、その場合には、あなたがオブジェクトBが途中でオブジェクトAを廃棄たくない、彼らの中に注入しています。

しかし、あなたはBで終了する必要がオブジェクトAの寿命を知っているいくつかのケースでは、あなたがdependency injectionパターンを参照している場合はオブジェクトA

5

のオブジェクトBの処分を持つように完全に適切である、IオブジェクトAの実装についてのオブジェクトBの知識に依存すると考えてください。このような依存性注入を行う理由は、通常、オブジェクトAの実装方法とIDisposableの必要性を事前に知らないためです。あなたが知っているのはインターフェイスだけです。

この動作を追加すると、2つのクラスIMO間の結合がより緊密になります。

2

(編集:応答するとき、それは質問がのIoC/DI程度であったことを私に明らかwan't;私は参考のためにここにこれを残しておきますが、受け入れ答えで最初に見て)。よる場合

あなたはBAの所有権を前提としていることを意味し、「注入された」、[はい。この例はStreamReaderのようなものになります。その後、

それだけしばらくAを使用しています(ただし、ABを超えて生き続けて)場合はありません。

一部のAPIを使用すると、所有権が想定されるべきかどうか(コンストラクタで)指定することができ(すなわち、注入されたオブジェクトをクリーンアップするかどうか)。この例はGZipStreamです。

1

私の2pは、Bが処分されたときにAを処分してはならないと主張することです。依存性注入のアイデアの全体は、あなたが受け取っているオブジェクトのバハウィアとライフサイクルを心配する必要はなく、ただ手渡されているだけです。

は、その後、再び、あなたはそれがもはや必要とされていないように、オブジェクトは、すぐにクリーンアップされますようにしたいです。あなたがそれを処分する必要があることを通知できるようにミニイベントシステムを作成するかもしれませんか?私はそれが本当にコンテキストに依存すると思う。

+0

この場合、オブジェクトAはそれを使用するクラスの前に処理されないように、何らかの参照カウントを必要とします。 –

関連する問題