シングルトンをプロバイダーのパラメーターにバインドする方法を知りたいです。
すなわち:
@Singleton
public class RunButtonController{
@Inject
public RunButtonController(EventBus eventbus){ ... }
public JComponent getView(){
return view;
}
...
}
public class UncaughtExceptionController{
@Inject
public UncaughtExceptionController(
EventBus eventBus, ...,
@Named(DefaultExceptionViewKey) JComponent defaultView)
{ ... }
...
}
public class GUIController{
//another consumer of RunButtonController, arguably the "main" consumer.
@inject
public GUIController(RunButtonController runButtonController,
UncaughtExceptionController uncaughtExceptionController, ...)
{ ... }
...
}
public class Bootstrapper{
public static void main(String[] args){
Injector injector = Guice.createInjector(new OptipModule());
GUIController controller = injector.getInstance(GUIController.class);
}
private static class OptipModule extends AbstractModule{
@Override
protected void configure() {
bind(EventBus.class).toInstance(new EventBus("OPTIPGlobalEventBus"));
bind(JFrame.class).to(GUIView.class);
}
@Provides @Named(DefaultExceptionViewKey)
public JComponent getFrom(RunButtonController runButtonController){
return runButtonController.getView();
}
}
}
コンストラクターにブレークポイントを設定すると、RunButtonController
一貫して 2 回インスタンス化されることがわかります。一度だけインスタンス化して
defaultExceptionViewProvider == runButtonController
、true
.
私は Castle Windsor をかなり広範囲に使用してきましたが、それが私が使用した唯一の IOC コンテナーであるため、私は新しいことに慣れていません。私は訪問者の行動の名残をいたるところで見ています.guiceのドキュメントは、クラスの定義された動作(つまり、インスタンスを1回使用し、このインスタンスを使用し、このファクトリを使用するなど)がそれ以上持続しないことをかなり明確にしています.構成されたモジュール。を使用すると、guice が子モジュールを作成することが書かれているのを見たと言いたい@Provides
ので、おそらく私がする必要があるのは、この子 @Provides で生成されたモジュールに「ねえ、このクラスはシングルトンです」と伝えることです。私はそれを解決する過程にあるので、ここにあります! あなた自身のものを使わないでください!
私はこのフレームワークについて間違った方向に進んでいると思います。私は注釈を壊してデバッグを行ってきましたが、おそらく私が本当にする必要があるのは、良いチュートリアルを読むのに数時間を費やすことです.残念ながら、私はそれを見つけることができません. JavaDoc には例があり、Web ページにはそれらが公開されていますが、コンテキストがほとんどないため、@Assisted に関する記事を3 回読んでも、まだ理解できません (おそらく、それを使用する必要があるのでしょうか?)。特に詳細なブロガーと彼のページのガイドエントリの方向を指し示している誰かのために。
これらの線に沿って、非常に余談ですが、この「デフォルトの通知領域は、この他の人のビューです」を IOC コンテナにプッシュしようとすることの影響は何なのか疑問に思っています。それはおそらくドメインロジックですか?UnhandledExceptionController
ビューが によって提供されたことを に知られたくありませRunButtonController
ん。同様に、RunButtonController
そのビューがビュー ツリーにスタンプされる以外の目的で使用されていることを に知られたくありません。
読んでくれてありがとう!