title: unable to create `Environment` in `Silhouette`
body: <p>I am trying to create the <code>Environment</code> in <code>Silhouette</code> but am unable to. I have defined the <code>Identity</code> and <code>Authenticator</code> as follows</p>
  
  <pre><code>trait SessionEnv extends Env {
    type I = User
    type A = SessionAuthenticator
  }
  </code></pre>
  
  <p>Next, I suppose I have to create the <code>Environment</code>. For that I have written the following code but am stick as I do not understand how to pass the different parameters expected by <code>Environment</code>'s <code>apply</code> method</p>
  
  <p>Environment companion object's apply method has signature</p>
  
  <pre><code>   def apply[E &lt;: Env](
    identityServiceImpl: IdentityService[E#I],
    authenticatorServiceImpl: AuthenticatorService[E#A],
    requestProvidersImpl: Seq[RequestProvider],
    eventBusImpl: EventBus
  </code></pre>
  
  <p>I know that I have to provide the implemention of <code>IdentityService</code>. I have done so as follows</p>
  
  <pre><code>class UserService @Inject()(userDao:UsersRepository) extends IdentityService[User] {...}
  </code></pre>
  
  <p>User is defined as follows</p>
  
  <pre><code>case class UserProfile(
                      loginInfo:LoginInfo,
                      confirmed: Boolean,
                      email:Option[String],
                      firstName: Option[String],
                      lastName: Option[String],
                      passwordInfo:Option[PasswordInfo]
                      //oauth1Info: Option[OAuth1Info],
                      //avatarUrl: Option[String]) {
                    )
  
  //representation of a user. A user has an Id and a profile
  case class User (id:UUID, profile:UserProfile)
  </code></pre>
  
  <p>But what do I pass for other values required by apply -  authenticatorServiceImpl: AuthenticatorService[E#A],
        requestProvidersImpl: Seq[RequestProvider],
        eventBusImpl: EventBus</p>
  
  <pre><code>val sessionEnv = com.mohiva.play.silhouette.api.Environment[SessionEnv](new UserService(userRepository),????)
  </code></pre>
  
  <p>Also, I suppose I don't have to use <code>Guice</code> as I am using compile time injection. Is that correct?</p>
  
  <p>UPDATE
  I changed from <code>SessionAuthenticatorService</code> to <code>CookieAuthenticatorService</code> to try some code available online.</p>
  
  <p>It seems my understanding that <code>Silhouette</code> provides some default implementations isn't exactly correct. I thought that I could simply use the <code>SessionAuthenticatorService</code> companion object defined in <code>https://github.com/mohiva/play-silhouette/blob/master/silhouette/app/com/mohiva/play/silhouette/impl/authenticators/SessionAuthenticator.scala</code> but that is not the case. Looking at some code created in <code>ScalaModule</code>, it seems that I'll have to create the required object myself but I'll need to do it in my AppLoader class (for compile time DI) instead of ScalaModule (for runtime DI). However, I still have not solved the problem. I do not know how to create the <code>signer</code> required by <code>CookieAuthenticatorService</code></p>
  
  <pre><code>val config = configuration.underlying.asInstanceOf[CookieAuthenticatorSettings]("silhouette.authenticator")
    val fingerprintGenerator = new DefaultFingerprintGenerator(false)
    val idGenerator = new SecureRandomIDGenerator()
    val clock:Clock = Clock()
  
    val authenticatorService: AuthenticatorService[CookieAuthenticator] = new CookieAuthenticatorService(config,None,,,fingerprintGenerator, idGenerator,clock) //STILL NEED TO FIND OUT HOW TO CREATE Signer AND CookieHeaderEncoding required by CookieAuthenticator service
  
  
   val cookieEnv = com.mohiva.play.silhouette.api.Environment[CookieEnv](userIdentityService ,authenticatorService,Seq(),EventBus())
  </code></pre>