2

私はプレイを使用しています!私のアプリケーションの1つのフレームワーク1.2.5。最初は、クラスの新しいインスタンスを作成するか、ファクトリを使用して、依存関係を解決していました。しかし、私のアプリケーションは成長し、そのような方法で依存関係を管理することが難しくなります。Google Guice で依存性注入に移行します

すべてのコントローラーについて、私は書く必要があるようです

requestStaticInjection(MyController.class);

コントローラーにサービスを注入する

@Inject
static MyService mySerivce;

これはイライラします。コントローラーに静的メソッドがあり、静的変数にしかアクセスできないのは好きではありません。コントローラーのコンストラクターに依存関係を渡したいのですが、静的フィールドを宣言したくありません。

再生コントローラーのメソッドが静的なのはなぜですか? それはある種の制限ですか?クラスを Play に注入する他の良い方法はありますか? コントローラー

4

2 に答える 2

1

古い質問ですが、同じ問題が発生し、ここで答えを見つけましたhttp://typesafe.com/blog/announce-play-framework-21-the-high-velocitしかし、それはあなたと同じ Play バージョン用ではありませんを使用して...

Play 2.1 は、静的メソッドの代わりに挿入されたコントローラーを呼び出すことができる新しいルート構文をサポートするようになりました。ルートファイルのコントローラーメソッドの前に「@」記号を付けるだけです

GET     /                  @controllers.Application.index()

conf/routes で

于 2013-09-15T04:42:25.887 に答える
0

クラスを Play に注入する他の良い方法はありますか? コントローラー

いいえ。コントローラーでサービスを作成しないでください。コントローラーを拡張しない通常のクラスにします。次に、コントローラーからサービス クラスを呼び出します。コントローラーのコードは最小限に抑えてください - そこには多くのバイトコード マジックがあるため、コントローラーのコードはシンプルに保ちます (オブジェクトのルックアップ、結果のレンダリングなど)。

于 2013-01-24T21:50:37.037 に答える