私のWicketApplicationでバックエンドと通信するインポートされたClient.classを初期化するのが好きです。私は私のWebApplication.class(これはinitメソッドの中で正しい?)でこれを行う必要があることを知っています。しかし、私はどのように私のPage.classesでこのインスタンスを取得できますか?どのように私はそれと通信することができますか?アドバイスWicket - 外部クラスを初期化する
答えて
ため
ありがとうございますgetApplication()
またはWebApplication.get()
を使用して、現在のアプリケーションを取得することができます。そこから、あなた自身の実装にその型を絞り込み、Client.class
属性のgetterを呼び出すことができるはずです。アプリケーションはすべてのユーザー間で共有されるオブジェクトであり、クライアントの属性はスレッドの安全性を確保する必要があります。
Google GuiceのようなDependency Injection Frameworkを使用して、インスタンスをコンポーネントに注入します。それ以外のCedric Gatayの答えは、ソリューションをかなりうまくカバーしています。
DIを使用すると、単体テストのための別の実装を心配する必要がなくなるため、テストモジュールで簡単に定義できるので、追加のボーナスを提供します。
あなたのページのコンストラクタで外部クラスを手動で '注入'することで、中盤に留まることができます。それは、後の時点でそれを切り替える方法を妨げることなく、この時点で新しい技術を組み込むという面倒を惜しまないでしょう。そうすれば、あなたのページはWebApplicationの特定の(あなたの)実装に縛られることはなく、テストで外部クラスの別の(模擬された)インスタンスを提供することで簡単にテストできます。
今日私はこのDIについて読んでいます。私は戸口を初めて使っています。私はまず注射なしでそれを試すことを考えました。しかし、それはそれなしで動作することはお勧めしません、それはありません? – user1090145
@ user1090145私はWicketとGoogle Guiceの両方の巨大なファンだから、この質問をするのは間違った人です。デカップリングは認識を超えて容易になりますが、他の人は予期しない場所(モジュールのような)に重要な情報を隠していると主張しています。私の答えには別のアプローチが含まれています。 – Nicktar
- 1. 外部クラスを制御/初期化する[AS3]
- 2. クラス初期化リスト
- 3. 外部Javascriptファイルからopenlayersマップを初期化する
- 4. パブリッククラスメンバ配列をクラス外から初期化する
- 5. コンストラクタの内部または外部のメンバ初期化
- 6. WebBindingInitializerへの@InitBinderの初期化の外部化
- 7. ポインタの初期化クラス
- 8. Pythonクラスの初期化
- 9. Pythonクラスの初期化
- 10. Rubyクラスの初期化
- 11. クラスのメンバーの初期化
- 12. クラスのストリームの初期化
- 13. タイプの初期化例外
- 14. 外部クラスのメソッドで内部クラスが宣言されている場合、内部クラスのインスタンスを初期化する方法はありますか?
- 15. NSObjectクラスの別のクラスを初期化するには?
- 16. メソッドの外部で使用するためのインスタンス変数の初期化
- 17. Spring Beanは外部プロパティファイルを使用してマップを初期化します
- 18. ShellExecuteExで外部アプリを起動し、初期化されるまで待つ
- 19. .NETでの動的クラスの初期化
- 20. 完全に初期化されたクラス
- 21. 仮想基底クラスと初期化リスト
- 22. R参照クラスのメソッド初期化
- 23. Pythonクラス変数の初期化
- 24. 別のPHPクラス初期化ファイル
- 25. C++クラスの初期化は、以下
- 26. VB.NETクラスの初期化と関数
- 27. MXMLクラスの初期化手順
- 28. 'System.Management.MTAHelper'の型初期化子が例外
- 29. オブジェクト初期化子とプロパティは例外
- 30. タイプの初期化は、例外
キャストを行うアプリケーションクラスに静的メソッドを作成することもできます。つまり、 'MyApplication.get()'は 'MyApplication'タイプを返します。 – biziclop