with sharedinstance patron example context companion kotlin

sharedinstance - singleton kotlin context



Singleton con argumento en Kotlin (4)

Dado que los objetos no tienen constructores, he hecho lo siguiente para inyectar los valores en una configuración inicial. Puede llamar a la función como desee y puede ser llamada en cualquier momento para modificar el valor (o reconstruir el singleton según sus necesidades).

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

La referencia de Kotlin dice que puedo crear un singleton usando la palabra clave del objeto así:

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

Sin embargo, me gustaría pasar un argumento a ese objeto. Por ejemplo un ApplicationContext en un proyecto de Android.

¿Hay alguna forma de hacer esto?


Kotlin tiene una función llamada Sobrecarga del operador , que le permite pasar argumentos directamente a un objeto.

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


Le recomiendo que use este formulario para pasar argumentos en un siglot en débito de kotlin para que el objeto de su constructor esté privado y bloqueado:

object Singleton { fun instance(context: Context): Singleton { return this } fun SaveData() {}

}

Y lo llamas así en la actividad.

Singleton.instance(this).SaveData()


También hay dos bibliotecas de inyección de Kotlin nativas que son bastante fáciles de usar y tienen otras formas de singletons, incluidas por hilo, basadas en clave, etc. No estoy seguro si está en el contexto de su pregunta, pero aquí hay enlaces a ambos:

En general, en Android, las personas utilizan una biblioteca como esta, o Dagger, et al., Para realizar la parametrización de singletons, su alcance, etc.