私はファクトリを使用して、インターフェイスの異なる具体的インスタンスを作成しています。具体的なインスタンスの1つは、通常注入されるサービスに依存します。サービスのライフサイクルはコンテナによって管理されます。この場合、コンテナを工場に注入することはできますか?容器を工場に注入しても問題ありませんか?
2
A
答えて
2
私は、コンテナに抽象ファクトリ、ファクトリインターフェイス、またはファクトリデリゲートを解決させ、代わりにコンシューマにそれを挿入させます。
この場合、工場は依存関係としてサービスを受け取り、工場で解決します。コメントに基づいて
更新:
あなたは工場出荷時にサービスを注入している場合は、そのサービスの同じ インスタンスは、工場が作成した各オブジェクトに渡されることはありませんか?
はい、工場で作成された各オブジェクトは、サービスの同じインスタンス(通常は私が望むもの)を取得します。それがではない場合は、をご希望の場合は、サービスファクトリを工場に挿入してください。いくつかのコンテナは工場の代理人を自動的に解決するためのサポートを提供するので、Func<IFooService>
を注入することができます。
しかし@SebastianWeberはコメントで述べたように、サービスのライフサイクルが 工場
のライフサイクルにバインドされ、その後、それがすべてのコンテナの制限ではありません。また、それが重要かどうか検討してください。あなたは2つのライフスパンのうち最短のものを選んで両方のライフスパンに使うことができます。
2
この場合、容器を工場に注入することはできますか?
確かです。しかしの場合、その工場実装はComposition Rootの内部にあります。そのファクトリがアプリケーション自体にある場合(つまり、の外にのComposition Root)、サービスロケータとしてコンテナを使用しています。これはan anti-patternであり、避けるべきです。
関連する問題
- 1. ngMockが工場に注入されていません
- 2. コンストラクタインジェクション - 工場にも注入しますか?
- 3. 工場をテストしようとしていて、注射の問題がある
- 4. TADOTable - 挿入に使用しても問題ありませんか?
- 5. キーウィンドウを変更しても問題ありませんか?
- 6. Ruby 1.8.5を使用しても問題ありませんか?
- 7. plistを使用しても問題ありませんか? iOS
- 8. TFSDeleteProject - ブランチを削除しても問題ありませんか?
- 9. カサンドラコレクションを使用しても問題ありませんか?
- 10. cellForRowAtにuitableviewcellを登録しても問題ありません。
- 11. ActorLogging#logを閉じても問題ありませんか?
- 12. デストラクタでベクターをクリアしても問題ありません
- 13. .netコア注入工場
- 14. エクスプレスjsアプリケーションインスタンスをグローバルスコープに割り当てても問題ありませんか?
- 15. コントローラangular.jsに工場データを注入
- 16. RubyのDRY - コード行を繰り返しても問題ありませんか?
- 17. コントロールフローにネットワーク例外を使用しても問題ありませんか?
- 18. 属性にHTMLエンティティを使用しても問題ありませんか?
- 19. 空のイベントハンドラを常に追加しても問題ありませんか?
- 20. UITableViewCellsを配列に保存しても問題ありませんか?
- 21. git:マージ中にコードを変更しても問題ありませんか?
- 22. Redux - 子コンテナコンポーネントに小道具を渡しても問題ありませんか?
- 23. 別のストレージクラスに変数を保存しても問題ありませんか?
- 24. DLLの代わりにバイナリアセンブリを参照しても問題ありません。
- 25. 接続がすでに開いている場合は、OracleConnection.Open()をコールしても問題ありませんか?
- 26. etreeでiterdescendants()を使用している場合、ツリーを変更しても問題ありませんか?
- 27. BackgroundWorkerからアプリケーションを再起動しても問題ありませんか?
- 28. メインアクティビティからコンテキスト変数を取得しても問題ありませんか?
- 29. js/cssライブラリからペーストをコピーしても問題ありませんか?
- 30. XcodeプロジェクトからPrefix.pchファイルを削除しても問題ありませんか?
moarcode plox nom nom nom nom nom – Yuck