Skip to content

Instantly share code, notes, and snippets.

View Rasalexman's full-sized avatar
🌍
i hope you are going to have an amazing day

Alexandr Minkin Rasalexman

🌍
i hope you are going to have an amazing day
View GitHub Profile
interface IProviderInterface
data class ProviderClass(override val id: String, override val name: String = "Provider") : IProviderInterface
val MY_PROVIDER_SCOPE_NAME = "MY_PROVIDER_SCOPE_NAME"
kodi {
bind<IProviderInterface>() at MY_PROVIDER_SCOPE_NAME with provider { ProviderClass(UUID.randomUUID().toString()) }
}
val providerInstaceByScope = instance<IProviderInterface>(scope = MY_PROVIDER_SCOPE_NAME)
@Rasalexman
Rasalexman / IProviderInterface.kt
Created May 18, 2020 16:52
Scope bindin example
interface IProviderInterface
data class ProviderClass(override val id: String, override val name: String = "Provider") : IProviderInterface
val MY_PROVIDER_SCOPE_NAME = "MY_PROVIDER_SCOPE_NAME"
kodi {
bind<IProviderInterface>() at MY_PROVIDER_SCOPE_NAME with provider { ProviderClass(UUID.randomUUID().toString()) }
}
val providerInstaceByScope = instance<IProviderInterface>(scope = MY_PROVIDER_SCOPE_NAME)
@BindSingle(
toClass = OkHttpClient::class,
toModule = "OkHttpModule"
)
fun createOkHttpClient(cache: Cache? = null): OkHttpClient {
val httpClient = OkHttpClient.Builder()
httpClient.connectTimeout(60, TimeUnit.SECONDS)
httpClient.writeTimeout(60, TimeUnit.SECONDS)
httpClient.readTimeout(60, TimeUnit.SECONDS)
object CustomObject {
@BindSingle(toClass = IAnotherClass::class)
fun providingMethod(
@WithInstance(with = "IAnotherClass::class") input: IMyClass
): IAnotherClass {
return input
}
}
//It is generate `Singleton` method for binding like:
@Rasalexman
Rasalexman / IAnotherClass.kt
Last active May 13, 2020 19:03
BindSingle example
interface IAnotherClass
interface IMyClass : IAnotherClass
@BindSingle(toClass = IMyClass::class)
class MyClass(
private val anotherOne: IAnotherClass,
@IgonreInstance private val ignoredReference: String = "MyIgnoredReference"
) : IMyClass
// It is generate `Singleton` method for binding like:
@Rasalexman
Rasalexman / MainApplication.kt
Created May 10, 2020 10:09
Module import exampe
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
kodi {
import(systemModule)
}
}
}
@Rasalexman
Rasalexman / SystemModule.kt
Last active May 6, 2020 22:00
Module example
val systemModule: IKodiModule = kodiModule {
bind<IRetrieveAndUpdateFirebaseTokenUseCase>() with provider {
RetrieveAndUpdateFirebaseTokenUseCase(
userPreference = instance<IUserPreference>(),
updateFirebaseTokenUseCase = instance<IUpdateFirebaseTokenUseCase>()
)
}
} withScope "FIREBASE_SCOPE"
@Rasalexman
Rasalexman / MainActivity.kt
Created May 6, 2020 19:11
Dependency injection example
class MainActivity : AppCompatActivity(), IKodi {
private val myClass: MyClass by immutableInstance() // 1.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val myClassInstance = instance<MyClass>() // 2
}
@Rasalexman
Rasalexman / MainActivity.kt
Created May 6, 2020 19:09
Getting the Kodi dependency from graph
// import
class MainActivity : AppCompatActivity(), IKodi {
val myAmazingClass: MyClass by immutableInstance() // 1.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// or you can get instance directly from DI
val myInstance = instance<MyClass>() // 2.
@Rasalexman
Rasalexman / liveData.kt
Last active January 19, 2020 00:26
Data convertion
liveData(context = viewModelScope.coroutineContext + Dispatcher.IO) {
 emitSource(
pagesRepository.getNextPageData(eventPageLiveData).asLiveData().map { dataList ->
dataList.convertToList<MyUIModel>()
}
)
}