私はGuiceにかなり慣れていないので、これが明白な質問ではないことを願っています...
C
リフレクションを使用してアプリケーションクラスの1つ(それを呼びましょう)を動的にインスタンス化するフレームワークを扱っているので、そのインスタンス化を制御することはできません。C
さらに、フレームワークがインスタンス化した後で新しく作成されたものにアクセスする簡単な方法はありません。これがどのC
ように見えるかです:
パブリッククラスCはIを実装します{ public C(){ //このctorはフレームワークによって呼び出されるので、ここでDIを使用できませんか? } public void initialize(){ //これはf/wが呼び出すインスタンス化後のフックです } private void m(){ 依存関係d=Dependency.getInstance(); d.doSmth(); } }
DIを使っC
て取得したいのですが。Dependency
これは明らかにシングルトンDependency
ですが、これは一般的にそうである必要はありません。
私は2つの可能な解決策を考え出しましたが、どちらも非常に整頓されているとは感じないので、専門家に聞いてみようと思いました。
静的注入。ただし、これがサービスロケーターのアンチパターンよりも大幅に向上するかどうかを確認するのに苦労しています。最終的には、外部から操作できる非最終的な静的フィールドになります...うーん。
C
フレームワークは、インスタンス化後に自身を初期化するためのフックをサポートしています(initialize()
上記の方法)。このメソッドは、セッターインジェクションを使用して新しく作成されたインスタンスをセルフインジェクトできます。
2の場合、これはより多くの外部変更可能性を意味すると思いますが、少なくとも単体テストなどの依存関係をもう少し明示的に公開します。問題は次のとおりです。その場合、どうすればGuice Injectorを手に入れることができますか(さらに別のサービスロケーターに依存することはできません)。また、アプリコード全体でインジェクターを明示的に参照することは疑わしい慣行であることも読みました(そして同意する傾向があります)。
あなたの洞察は本当にありがたいです。
どうもありがとう、
クリスチャン