title: How to inject dependencies in a ktor Application
body: <p>The documentation talks about dependency injection but does not really show how it is being done.</p>
  
  <p>Documentation is not completed as well and has a bunch of place holders:
  <a href="http://ktor.io/getting-started.html" rel="noreferrer">http://ktor.io/getting-started.html</a></p>
  
  <p>I tried to create my main function in a way that it accepts parameter (which is my dependency) but that failed on the test side when I call <code>withTestApplication</code>.
  I looked into the application code and saw that Application accepts a configuration object but I have no idea how I can change that configuration object to inject some dependencies inside of it.</p>
  
  <pre><code>package org.jetbrains.ktor.application
  
  /**
   * Represents configured and running web application, capable of handling requests
   */
  class Application(val environment: ApplicationEnvironment) : ApplicationCallPipeline() {
      /**
       * Called by host when [Application] is terminated
       */
      fun dispose() {
          uninstallAllFeatures()
      }
  }
  
  /**
   * Convenience property to access log from application
   */
  val Application.log get() = environment.log
  </code></pre>
  
  <p>In the test code using <code>withTestApplication</code> I have something similar to the below:</p>
  
  <pre><code>@Test
  internal fun myTest() = withTestApplication (Application::myMain)
  </code></pre>
  
  <p>The above <code>withTestApplication</code> would fail if I call <code>myMain</code> with parameters (parameters that I need to mock and inject.)</p>
  
  <p><strong>Update:</strong></p>
  
  <p>The issue is that in my request handling, I am using a dependency class that connects to other web services outside and does some requests, I need a way to be able to inject this so in my tests I can stub/mock it and change its behavior based on my test cases.</p>