ベストプラクティスの短い質問:オブジェクトAが別のオブジェクトBに注入されている場合、オブジェクトBはオブジェクトBを実装し、Bを配置するとAを処分する必要がありますか?注入された特性は処分する必要がありますか?
答えて
私は一般的にノーと言います。依存性注入の性質は、注入されたオブジェクトが注入されたもののライフサイクルをあまり知らないことを意味します。これはある程度注射の定義です。そういうわけで、私は注入されたオブジェクトが注射されたものを処分するとは思わない。注入コードは注入している全てのオブジェクトの完全なライフサイクルを知る責任を負うべきであり、それらに対するすべての操作が完了したときであっても、以前からではなく、それらを適切に処分できなければならない。
私はそれが本当に主観的になると思います。
これは、すべてのオブジェクトAの寿命を制御する必要があります誰に煮詰めるでしょうか?インスタンスオブジェクトCとDのため
言っても、オブジェクトAは、その場合には、あなたがオブジェクトBが途中でオブジェクトAを廃棄たくない、彼らの中に注入しています。
しかし、あなたはBで終了する必要がオブジェクトAの寿命を知っているいくつかのケースでは、あなたがdependency injectionパターンを参照している場合はオブジェクトA
のオブジェクトBの処分を持つように完全に適切である、IオブジェクトAの実装についてのオブジェクトBの知識に依存すると考えてください。このような依存性注入を行う理由は、通常、オブジェクトAの実装方法とIDisposableの必要性を事前に知らないためです。あなたが知っているのはインターフェイスだけです。
この動作を追加すると、2つのクラスIMO間の結合がより緊密になります。
(編集:応答するとき、それは質問がのIoC/DI程度であったことを私に明らかwan't;私は参考のためにここにこれを残しておきますが、受け入れ答えで最初に見て)。よる場合
あなたはB
がA
の所有権を前提としていることを意味し、「注入された」、[はい。この例はStreamReader
のようなものになります。その後、
それだけしばらくA
を使用しています(ただし、A
がB
を超えて生き続けて)場合はありません。
一部のAPIを使用すると、所有権が想定されるべきかどうか(コンストラクタで)指定することができ(すなわち、注入されたオブジェクトをクリーンアップするかどうか)。この例はGZipStream
です。
私の2pは、Bが処分されたときにAを処分してはならないと主張することです。依存性注入のアイデアの全体は、あなたが受け取っているオブジェクトのバハウィアとライフサイクルを心配する必要はなく、ただ手渡されているだけです。
は、その後、再び、あなたはそれがもはや必要とされていないように、オブジェクトは、すぐにクリーンアップされますようにしたいです。あなたがそれを処分する必要があることを通知できるようにミニイベントシステムを作成するかもしれませんか?私はそれが本当にコンテキストに依存すると思う。
- 1. モノタック:ビューを処分する必要がありますか?
- 2. C#でパラメータを処分する必要はありますか?
- 3. LocalTargetsでは、アトミシティを自分で処理する必要がありますか?
- 4. 私はどのようにサービスドメインの注入を処理する必要がありますか?
- 5. 例外が処理された後にブレークする必要があります
- 6. UUIDはサービス、特性、記述子のために区別される必要がありますか?
- 7. レジューサーは入れ子にする必要がありますか?
- 8. Request.CreateResponse()からHttpResponseExceptionを処分する必要がありますか?
- 9. 静的オブジェクト内で定義された非静的オブジェクトを処分する必要はありますか?
- 10. ターゲットディレクトリには何を入れる必要がありますか?
- 11. MVCビューにサービスを注入する必要がありますか?
- 12. SSL_read()はSSL_ERROR_WANT_WRITEを処理する必要がありますか?
- 13. 元のコンテンツが分析された場合は、elasticsearch copy_toを再分析する必要がありますか?
- 14. 属性gridster-itemはどこに挿入する必要がありますか?
- 15. Beanが定義された後のSpring Beanの注入 - 注入の特性
- 16. 請求モジュールを自分のクラスライブラリに入れる必要がありますか?
- 17. CRM OrganizationServiceProxyとOrganizationServiceContextの両方を処分する必要がありますか?
- 18. SqlDataReaderを手動で閉じて処分する必要がありますか?
- 19. リポジトリにドメインオブジェクトまたはリポジトリを注入すると、ビジネスロジックを意識する必要がありますか?
- 20. angularjsのコントローラに$ scopeを注入する必要はありますか?
- 21. ビューでデータを注文する必要がありますか?
- 22. なぜhtml_safeに注意する必要がありますか?
- 23. CSLAを依存性注入フレームワークで使用する必要がありますか?
- 24. RXJava2。一度放出する流れを処分する必要がありますか? (シングル、たぶん)
- 25. オブジェクトを処分する必要があるときは、どうすればわかりますか?
- 26. 使用後にDbCommandを処分する必要はありますか?
- 27. 依存性注入:いくつかのオブジェクトにすべてを注入するか、サービスロケータを使用する必要がありますか?
- 28. 特定の特性を必要とする - >セルフタイプ注釈?
- 29. AngularJSで使用するには、必ず$ locationを注入する必要がありますか?
- 30. ZF2 Doctrine - 特定のIDを必要とする依存性注入を処理する方法
この場合、オブジェクトAはそれを使用するクラスの前に処理されないように、何らかの参照カウントを必要とします。 –