に依存注射と継承を組み合わせることで、私は次のことを行っている:は2.4から2.5へのアプリケーションの移行(およびすべての静的参照を取り除く)の私の過程でプレイ2.5
class Generic @Inject()(implicit val mat: Materializer, cache: CacheApi, wsClient: WSClient, configuration: play.api.Configuration)
{ ... }
@Singleton
class Concrete1 @Inject() (gw:Generic) { ... }
@Singleton
class Concrete2 @Inject() (gw:Generic) { ... }
それを使用するには、私は、GenericのインスタンスをConcrete1/2に注入します。 それはうまくいきますが、Web上のそれに関するいくつかの他の例を見た後、それはかなり正しいように見えません。
私はこのようにそれを修正することについて考えています:
abstract class Generic(cache: CacheApi, wsClient: WSClient, configuration: play.api.Configuration)
{ ... }
@Singleton
class Concrete1(cache: CacheApi, wsClient: WSClient, configuration: play.api.Configuration)
extends Generic(cache, wsClient, configuration) { ... }
@Singleton
class Concrete2(cache: CacheApi, wsClient: WSClient, configuration: play.api.Configuration)
extends Generic(cache, wsClient, configuration) { ... }
次に行うことができるようにするために:@Inject() (c1:Concrete1, c2:Concrete2)
私はで定義されたように私は彼らがモジュールである必要が推測:https://www.playframework.com/documentation/2.5.x/ScalaDependencyInjection#Programmatic-bindings? ここでは何が理にかなっていますか?