2017-09-12 13 views
0

LagomフレームワークとScaladslを使用して電子メールを送信する簡単なサービスを作成しようとしています。私は電子メールを処理するためにプレイメーラープラグインを使用しようとしていますが、私はサービスの実装に注入しようとしています。Lagomに依存関係を注入しようとしたときにエラーが発生しました

私はサービスの特性と実装を作成し、mailerClientをコンストラクタの依存として渡しました。

trait MailerService extends Service { ... } 

class MailerServiceImpl(mailerClient: MailerClient, persistentEntityRegistry: PersistentEntityRegistry) extends MailerService { 
... 
} 

私はApplicationLoaderでサービスを配線していますが、パターン次Lagom documentationにしてmacwireを使用して、ハロー世界のアプリケーションで説明しました。

abstract class MailerApplication(context: LagomApplicationContext) 
    extends LagomApplication(context) 
    with CassandraPersistenceComponents 
    with AhcWSComponents { 

    override lazy val lagomServer: LagomServer = serverFor[MailerService](wire[MailerServiceImpl]) 
    override lazy val jsonSerializerRegistry = MailerSerializerRegistry 
    persistentEntityRegistry.register(wire[MailEntity]) 
} 

コンパイルしようとすると、次のエラーが発生します。

/.../workspace/mailer/mailer-impl/src/main/scala/com/example/mailer/impl/MailerApplicationLoader.scala:92 [エラー]: は型の値を見つけることができません:[play.api.libs.mailer.MailerClient]

私はmacwireがコンストラクタから依存関係を整理することができると思っていましたが、実際にはそうではないようです。私は、これまでどんな成功もせずにアプリケーションローダーで明示的にワイヤリングしようとするような、さまざまなオプションを試しました。

DIがLagomでどのように動作するかについて間違っていることは確かですが、わかりません。

アイデア?

答えて

3

MailerClientを注射できるようにするには、MailerComponents形質と、サービスで使用する他の形質とを混合する必要があります。例えば

:これはcompile-time injection

にプレイメーラーのドキュメントで説明されて

// ... 
import play.api.libs.mailer._ 

abstract class MailerApplication(context: LagomApplicationContext) 
    extends LagomApplication(context) 
    with MailerComponents // add this here 
    with CassandraPersistenceComponents 
    with AhcWSComponents { 

    override lazy val lagomServer: LagomServer = serverFor[MailerService](wire[MailerServiceImpl]) 
    override lazy val jsonSerializerRegistry = MailerSerializerRegistry 
    persistentEntityRegistry.register(wire[MailEntity]) 
} 

関連する問題