2017-02-01 12 views
3

私はFunc<T>Func<Owned<T>>とは異なり、各タイプの依存関係を注入する方法を知っています。しかし、私はしばしばいつのように混乱していくのでしょうか?Func <Owned<T>> vs Func 依存性

MVPパターンに従ってアプリケーションがあり、ビューPrintViewを注入したいとします。次に、どのような理由で私はFunc<PrintView>またはFunc<Owned<PrintView>>のような視点を注入すべきかを決めなければならないでしょうか?

答えて

6

Func<T>は、ライフタイムスコープがリリースされたときに廃棄されるライフタイムスコープからアイテムを解決します。たとえば、MVCコントローラの場合:

  • コントローラは要求ライフタイムスコープから解決されます。
  • Func<T>を呼び出すと、要求有効期間スコープからTが解決されます。
  • 要求ライフタイムスコープが廃棄されると、コントローラと任意のTインスタンスが要求スコープとともに廃棄されます。

Owned<T>は、明示的にTインスタンスの処分の責任を取っているを意味します。 Func<Owned<T>>は、生涯有効範囲からOwned<T>を取得します。

  • コントローラは要求ライフタイムスコープから解決されます。
  • Func<Owned<T>>を呼び出すと、要求の有効期間スコープからOwned<T>が解決されます。
  • 要求ライフタイムスコープが配置されている場合、コントローラーは配置されますが、Owned<T>インスタンスはではありません。です。コントローラーやアプリケーションコード内の何らかのクリーンアップで自分で行う必要があります。

Owned<T>実際には、物事が処理される時間を制御したい場合にのみ面白いです。あなたが気にしない、または生涯の範囲の処理があなたのためにそれを世話することを望むなら、それは興味深いものではありません。

+0

私はコンポーネントの寿命を監視することができますVisual Studioで/ツールはありますか?ありがとう! –

+0

いいえ、いくつかの検索を行うと、さまざまなAutofacイベントが発生したときにどのようにログを取ることができるか、ここでは質問があります。それは助けるかもしれません。 –

+0

今はそれで十分だろうと思う。ありがとう。 –

関連する問題