2016-09-29 10 views
0

私は2.4.6から2.5.xまでの再生フレームワークアプリをアップグレードしています。 いくつかのオブジェクトに属するヘルパーメソッドを呼び出すいくつかの発生があります。これらのヘルパーメソッドは、playのビルトインクラス(たとえば、play.api.Play.current.configuration.underlying.getString)を使用して、ジョブを完了させます。再生2.5.X依存性注入

私は警告以下の取得:私はクラスメソッドでは、この問題に直面した場合、私は依存性の注入を使用することができます

:「これは、アプリケーションへの静的参照され、使用のDI代わりオブジェクトプレイ中メソッド電流が推奨されていません」を。メソッドがオブジェクトに属し、DIを使用するよう警告されているような状況にどう対処するのですか?

+0

あなたが依存性注入を使用する場合は、あなただけのクラスにあなたのオブジェクトを変更することができますし、それが作業を行います。 @Singletonでそれに注釈を付ける – stsatlantis

+0

私は(@Singleton注釈でクラスにオブジェクトを変更した後に)ヘルパー・メソッドを使用する場合は、このアプローチの問題があり、プレイは次のエラーを与える: オブジェクトClientHandlerでパッケージコントローラ [エラーのメンバーではありません]注:クラスClientHandlerは存在しますが、コンパニオンオブジェクトはありません。 [エラー] controllers.ClientHandler.getClientUrl – Shailesh

答えて

2

通常、Play Frameworkは古い静的参照を使用する代わりに挿入できるクラスを提供します。例えば

、以下のあなたがPlay.current.configurationDBの使用を停止することができますを意味します:

import javax.inject.Inject 
import play.api.db.Database 
import play.api.Configuration 

class MyClass @Inject() (configuration: Configuration, db: Database) { 
    ... 
} 
+0

私はオブジェクトではないクラスを使用しています。 – Shailesh

+0

それは全体のポイントです。シングルトン 'オブジェクト'は推奨されなくなりました。注入された 'Configuration'インスタンスは、シングルトン' object'と同じように動作するはずです。これを使うには、自分のシングルトン 'object'sを' class'にも変更するべきです。それでは、あなたはコントローラの中にヘルパー 'class'を注入することができます(もしかしたらどこでも必要かもしれません)。 – irundaia

+0

合意しましたが、@ Singletonアノテーションでオブジェクトをクラスに変更すると、playはclassNameでヘルパメソッドを呼び出すことができません。 helperMethod()。 – Shailesh