2016-05-09 5 views
1

引数に依存性が注入されたオーバーロードされたplay.api.mvc.Controller特性を作成することはできますか?Playフレームワークは依存性注入型の特性を継承していますか?

例えば、私はAuthorizationServiceを注入した依存性を必要とするカスタマイズされたアクションをいくつか持っているとします。しかし、私はそれが私のUserControllerでの私のAuthorizationServiceを注入するために私を必要としないようCustomController形質を作成する方法を見つけ出すことはできません

class UserController extends CustomController { 
    def getUser(userID: String) = CustomAction { 
    ... 
    } 
} 

:私はこのように私のコントローラを書きたいと思います。 Guiceでこれを行う方法はありますか?

答えて

1

形質がインスタンス化できないため、依存性を形質に挿入することはできません。特性に依存関係を定義するコンストラクタがない場合は、UserController経由でAuthServiceを注入する必要があります。

例。

trait CustomController extends Controller { 
    val authService: AuthService 
    ... 
} 

class UserController @Inject()(override val authService: AuthService) extends CustomController { 
    ... 
} 
4

あなたのCustomController特性にフィールドを挿入することができます。フィールドは最終的なものでなければならないので、スカラでvarと宣言しなければなりません。

@Inject() var authService: AuthorizationService 

また、注入されたVARプライベート作り、注入されたフィールドを参照し、公開ヴァルを宣言することができます。この場合、は、遅延クラスである必要があります。これは、クラスがインスタンス化された後に注入が行われるためです。詳細はGuice docsを参照してください。

@Inject() private var as: AuthorizationService = _ 
lazy val authService: AuthorizationService = as