Singleton con argumento en Kotlin

La reference de Kotlin dice que puedo crear un singleton usando la palabra key de object de esta manera:

object DataProviderManager { fun registerDataProvider(provider: DataProvider) { // } } 

Sin embargo, me gustaría pasarle una discusión a ese object. Por ejemplo, un ApplicationContext en un proyecto de Android.

¿Hay alguna forma de hacer esto?

Como los objects no tienen constructores, he hecho lo siguiente para inyectar los valores en una configuration inicial. Puede llamar a la function como lo desee y se puede llamar en cualquier momento para modificar el valor (o rebuild el singleton en function de sus necesidades).

 object Singleton { private var myData: String = "" fun init(data: String) { myData = data } fun singletonDemo() { System.out.println("Singleton Data: ${myData}") } } 

Kotlin tiene una característica llamada sobrecarga del operador , que le permite pasar arguments directamente a un object.

 object DataProviderManager { fun registerDataProvider(provider: String) { // } operator fun invoke(context: ApplicationContext): DataProviderManager { //... return this } } //... val myManager: DataProviderManager = DataProviderManager(someContext) 

También hay dos bibliotecas de inyección de Kotlin nativas que son bastante fáciles de usar, y tienen otras forms de singleton incluyendo por hilo, basado en key, etc. No estoy seguro de si está en el context de su pregunta, pero aquí hay enlaces a ambos:

Normalmente, en Android las personas usan una biblioteca como esta, o Dagger, y otros para lograr la parametrización de singletons, scoping, etc.

  • Reemplazar SAM-constructor con lambda con tipo covariante
  • Diferencia entre varias funciones verifySignatures en la testing de unidad de flujo Corda
  • Android: la ejecución de Kotlin falló al intentar usar Databinding
  • La aplicación Kotlin cli no funciona después de actualizar a kotlin 1.0.0-beta
  • Error Kotlin: reference no resuelta: fusionar (para list.merge ())
  • Interoperabilidad de Kotlin JS y GWT
  • ¿Cómo correctamente serializar tal JSON por medio de GSON Android?
  • Alternativa de Kotlin al performance de la corotina de Python y enviar
  • Kotlin lambda con varios parameters
  • ¿Qué significa `impl` en Kotlin?
  • Nombre de image dibujable inaccesible en Kotlin?