【发布时间】:2018-09-12 09:00:55
【问题描述】:
我正在研究 Silhouette 框架,并正在创建一个 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 [error] required: AuthenticatorService[components.SessionEnv#A]
看来我的概念不正确。为什么我不能通过SessionAuthenticatorService?
【问题讨论】:
-
所以我不熟悉这些框架中的任何一个,但通常是关于伴随对象的一个词。您可以将它们视为静态类成员(例如 java 中带有 static 关键字的字段和方法),因此包含这些成员的对象实际上不是该特定类的类型。例如。你有一些类
Foo该类的伴生对象Foo不是Foo类型,但有它自己的(主要是不相关的类型) -
谢谢多米尼克。你的回答也是正确的
标签: scala silhouette