2016-10-14 4 views
0

Play 2.5.Xでは、依存関係注入を使用する必要があります。次のコードは遊びのドキュメントからの例です:プレイ中のDependency Injectedクラスのインスタンスを作成する2.5.X

class HomeController @Inject() (configuration: play.api.Configuration) extends Controller { 
    def index = Action { 
    Ok(views.html.index("Your new application is ready.")) 
    } 
} 

私はHomeControllerにいくつかの追加のヘルパーメソッドgetXXXを定義し、どこか別の場所からアクセスする必要がある場合は、どのように私は、このメソッドにアクセスすることができますか?

私が本当に興味を持っているのは、HomeControllerのインスタンスを作成する方法です。homeControllerInstance.getXXXを使用することができます。

私は次のようにインスタンスを作成しようとした場合:

val homeControllerInstance = new HomeController() 

を私はエラーを取得:

Compilation error[not enough arguments for constructor HomeController: (configuration: play.api.Configuration)HomeController 

は私がにHomeControllerクラス宣言を変更しようとしました:

class HomeController @Inject(configuration: play.api.Configuration) extends Controller 

しかし、これは与えました私のエラー:

classfile annotation arguments have to be supplied as named arguments 

誰かが説明してください、どうすればこの問題を解決できますか?

+0

このヘルパーメソッドとは何ですか?コントローラーがそれを保管するのに最適な場所だと確信していますか? – michaJlS

+0

あなたの質問はあまり明確ではありません。コントローラーを注射可能コンポーネントとして宣言する方法を尋ねていますか? – Nio

+0

ユニットテスト用ですか?この場合、@ Injectアノテーションを付けたコントローラをマークした後、https://www.playframework.com/documentation/2.5.x/ScalaTestingWithGuice –

答えて

0

は、Googleのジュースを使用してXyzクラスからクラスHomeControllerのごgetXXX方法を使用したい場合は、私はあなたの実際の問題が何であるかわからないが、このことができます願っていますが、この

import com.google.inject.Inject 

class Xyz @Inject()(homeCon: HomeController) { 
    homeCon.getXXX 
} 

を試してみてください。

class HomeController @Inject(a :IWantThisInjected) (configuration: play.api.Configuration)

そのエラーで失敗しますが、移動:

0

あなたは時々あなたが@Injectキーワードの後に​​新しい行を配置する必要がありますので、これは

play.api.Play.current.injector.instanceOf(classOf[UID]) 
0

を持つクラスをインスタンス化します最初のパラメータのセットを次の行に修正することができます。

class HomeController @Inject (a :IWantThisInjected) (configuration: play.api.Configuration)

関連する問題