2017-09-12 15 views
0

Lagom 프레임 워크와 Scaladsl을 사용하여 전자 메일을 보내도록 간단한 서비스를 만들려고합니다. 이메일을 처리하기 위해 메일러 플러그인을 사용하려고하지만 서비스 구현에 삽입하려고 애 쓰고 있습니다.Lagom에 종속성 삽입을 시도하는 중 오류가 발생했습니다.

생성자에 종속성으로 mailerClient을 전달하여 서비스 특성 및 구현을 만들었습니다. 나는 패턴 다음 ApplicationLoader의 서비스를 배선하고있어

trait MailerService extends Service { ... } 

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

는 macwire를 사용하여 Lagom documentation에와 안녕하세요 세계 응용 프로그램에서 설명했다.

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가 생성자로부터 종속성을 분류 할 수있을 것이라고 생각했지만 실제로는 그렇지 않은 것처럼 보였다. 지금까지 아무런 성공도없이 애플리케이션 로더에서 명시 적으로 연결하는 것과 같은 다른 옵션을 시도했습니다.

나는 Lagom에서 DI가 어떻게 작동하는지에 대해 잘못된 것이있어 왔지만 나는 그것을 알 수 없다고 확신한다.

아이디어가 있으십니까?

답변

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]) 
}