2012-01-11 15 views
0

私のWicketApplicationでバックエンドと通信するインポートされたClient.classを初期化するのが好きです。私は私のWebApplication.class(これはinitメソッドの中で正しい?)でこれを行う必要があることを知っています。しかし、私はどのように私のPage.classesでこのインスタンスを取得できますか?どのように私はそれと通信することができますか?アドバイスWicket - 外部クラスを初期化する

答えて

2

ため

ありがとうございますgetApplication()またはWebApplication.get()を使用して、現在のアプリケーションを取得することができます。そこから、あなた自身の実装にその型を絞り込み、Client.class属性のgetterを呼び出すことができるはずです。アプリケーションはすべてのユーザー間で共有されるオブジェクトであり、クライアントの属性はスレッドの安全性を確保する必要があります。

+0

キャストを行うアプリケーションクラスに静的メソッドを作成することもできます。つまり、 'MyApplication.get()'は 'MyApplication'タイプを返します。 – biziclop

0

Google GuiceのようなDependency Injection Frameworkを使用して、インスタンスをコンポーネントに注入します。それ以外のCedric Gatayの答えは、ソリューションをかなりうまくカバーしています。

DIを使用すると、単体テストのための別の実装を心配する必要がなくなるため、テストモジュールで簡単に定義できるので、追加のボーナスを提供します。

あなたのページのコンストラクタで外部クラスを手動で '注入'することで、中盤に留まることができます。それは、後の時点でそれを切り替える方法を妨げることなく、この時点で新しい技術を組み込むという面倒を惜しまないでしょう。そうすれば、あなたのページはWebApplicationの特定の(あなたの)実装に縛られることはなく、テストで外部クラスの別の(模擬された)インスタンスを提供することで簡単にテストできます。

+0

今日私はこのDIについて読んでいます。私は戸口を初めて使っています。私はまず注射なしでそれを試すことを考えました。しかし、それはそれなしで動作することはお勧めしません、それはありません? – user1090145

+0

@ user1090145私はWicketとGoogle Guiceの両方の巨大なファンだから、この質問をするのは間違った人です。デカップリングは認識を超えて容易になりますが、他の人は予期しない場所(モジュールのような)に重要な情報を隠していると主張しています。私の答えには別のアプローチが含まれています。 – Nicktar

関連する問題