Silhouette 4 and Guice Bindings

189 views
Skip to first unread message

Aaron Patzer

unread,
May 19, 2016, 3:37:48 PM5/19/16
to Silhouette
Off the https://github.com/mohiva/play-silhouette-angular-seed/tree/master build which relied on "com.mohiva" %% "play-silhouette" % "4.0.0-BETA4" I am running into binding issues.

class SilhouetteModule extends AbstractModule with ScalaModule {

 
def configure() {
...
 bind
[DelegableAuthInfoDAO[PasswordInfo]].to[PasswordInfoDAO]
 bind
[DelegableAuthInfoDAO[OAuth1Info]].to[OAuth1InfoDAO]
 bind
[DelegableAuthInfoDAO[OAuth2Info]].to[OAuth2InfoDAO]
 bind
[DelegableAuthInfoDAO[OpenIDInfo]].to[OpenIDInfoDAO]
...

Guice seems to always bring in PersistenceModule, then tells me that a binding to "DelegableAuthInfoDAO was already configured" There is no problem at all in Silhouette 3 with the same code. How does one override the PersistenceModule bindings with their own real (not in memory) persistence in Silhouette 4?

Aaron Patzer

unread,
May 19, 2016, 4:13:49 PM5/19/16
to Silhouette
This is the exact error off of silhouette master. You can see my forked code at https://github.com/apatzer/play-silhouette-angular-slick-seed

Caused by: com.google.inject.CreationException: Unable to create injector, see the following errors:

1) A binding to com.mohiva.play.silhouette.persistence.daos.DelegableAuthInfoDAO<com.mohiva.play.silhouette.api.util.PasswordInfo> was already configured at modules.SilhouetteModule.bind(SilhouetteModule.scala:34) (via modules: com.google.inject.util.Modules$OverrideModule -> modules.SilhouetteModule).

  at com
.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule.bind(PersistenceModule.scala:34) (via modules: com.google.inject.util.Modules$OverrideModule -> com.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule)


2) A binding to com.mohiva.play.silhouette.persistence.daos.DelegableAuthInfoDAO<com.mohiva.play.silhouette.impl.providers.OAuth1Info> was already configured at modules.SilhouetteModule.bind(SilhouetteModule.scala:34) (via modules: com.google.inject.util.Modules$OverrideModule -> modules.SilhouetteModule).

  at com
.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule.bind(PersistenceModule.scala:34) (via modules: com.google.inject.util.Modules$OverrideModule -> com.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule)


3) A binding to com.mohiva.play.silhouette.persistence.daos.DelegableAuthInfoDAO<com.mohiva.play.silhouette.impl.providers.OAuth2Info> was already configured at modules.SilhouetteModule.bind(SilhouetteModule.scala:34) (via modules: com.google.inject.util.Modules$OverrideModule -> modules.SilhouetteModule).

  at com
.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule.bind(PersistenceModule.scala:34) (via modules: com.google.inject.util.Modules$OverrideModule -> com.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule)


4) A binding to com.mohiva.play.silhouette.persistence.daos.DelegableAuthInfoDAO<com.mohiva.play.silhouette.impl.providers.OpenIDInfo> was already configured at modules.SilhouetteModule.bind(SilhouetteModule.scala:34) (via modules: com.google.inject.util.Modules$OverrideModule -> modules.SilhouetteModule).

  at com
.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule.bind(PersistenceModule.scala:34) (via modules: com.google.inject.util.Modules$OverrideModule -> com.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule)


5) A binding to com.mohiva.play.silhouette.api.repositories.AuthInfoRepository was already configured at modules.SilhouetteModule.provideAuthInfoRepository() (via modules: com.google.inject.util.Modules$OverrideModule -> modules.SilhouetteModule).

  at com
.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule.provideAuthInfoRepository(PersistenceModule.scala:62) (via modules: com.google.inject.util.Modules$OverrideModule -> com.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule)


Aaron Patzer

unread,
May 19, 2016, 4:38:57 PM5/19/16
to Silhouette
Solved.

Until 4.0_BETA5 is out, add the following to your application.conf

play.modules.disabled += "com.mohiva.play.silhouette.persistence.memory.modules.PersistenceModule"

On Thursday, May 19, 2016 at 3:37:48 PM UTC-4, Aaron Patzer wrote:

Christian Kaps

unread,
May 20, 2016, 1:51:41 AM5/20/16
to Silhouette
Hello Aaron,

this is one solution. But if you do not use the memory module then it's not necessary to import it as dependency into your application.

So another solution would be to remove the following line from your build.sbt.

"com.mohiva" %% "play-silhouette-persistence-memory" % "4.0.0-BETA4"


Best regards,
Christian
Reply all
Reply to author
Forward
0 new messages