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.

  • Cómo establecer maxLength en Anko
  • Kotlin: ¿parameters de function enviados pero no ejecutados?
  • Convirtiendo un Observable en un Flujo con contrapresión en RxJava2
  • Rxjava retrofit parse api error para el usuario
  • Obtiene N últimos objects emitidos por observables en RxJava2
  • La igualdad de class Kotlin falla
  • kotlin coroutine y la relación entre el manejador principal
  • Kotlin: ¿Puedes usar arguments con nombre para varargs?
  • java https: // localhost (SSL) - posible sin instalar certs en el cliente?
  • Pasar parameters a un getter personalizado en kotlin
  • ¿Qué ventajas ofrece kotlin para la creación de templates XML?