1

我正在研究剪影框架,并正在创建一个类型的变量Environment。它的伴生对象有签名

def apply[E <: Env](
  identityServiceImpl: IdentityService[E#I],
  authenticatorServiceImpl: AuthenticatorService[E#A],
  requestProvidersImpl: Seq[RequestProvider],
  eventBusImpl: EventBus

对于authenticatorServiceImpl参数,我认为我可以传递伴随对象SessionAuthenticatorService(定义在 中https://github.com/mohiva/play-silhouette/blob/master/silhouette/app/com/mohiva/play/silhouette/impl/authenticators/SessionAuthenticator.scala)但是当我尝试时:

val sessionEnv = com.mohiva.play.silhouette.api.Environment[SessionEnv](new UserService(userRepository),SessionAuthenticatorService() ,CredentialsProvider(),EventBus())

我得到错误

com.mohiva.play.silhouette.impl.authenticators.SessionAuthenticatorService.typ 不带参数。

我删除了()但又出现了另一个错误:

发现:SessionAuthenticatorService.type [错误] 必需:AuthenticatorService[components.SessionEnv#A]

看来我的概念是不健全的。为什么我不能通过SessionAuthenticatorService

4

1 回答 1

1

伴随对象不是伴随类的实例。它实际上是另一种类型。

class ABC(val arg: Int)
object ABC

val abc: ABC      = new ABC(9)
val xyz: ABC.type = ABC

abc.arg  //res0: Int = 9
xyz.arg  //Error: value arg is not a member of object A$A1661.this.ABC
于 2018-04-03T08:33:39.150 回答