write readme
This commit is contained in:
parent
8a051c3497
commit
6344d37354
1 changed files with 89 additions and 1 deletions
90
README.md
90
README.md
|
|
@ -1,2 +1,90 @@
|
||||||
# ReloadableHiltModule
|
# ReloadableHiltModule
|
||||||
Annotation processor which generates a module that can be reloaded integrated with Hilt
|
Annotation processor which can generates modules integrated with Hilt that can be reload.
|
||||||
|
Reload means all the objects provided by the Module will be kept until it's reloaded. At that point the provided instances are recreated.
|
||||||
|
|
||||||
|
## Why
|
||||||
|
|
||||||
|
Hilt is opinionated and clear on it's rules. However with dagger I was able to have Components scoped for a Logged In User, or for a specific flow.
|
||||||
|
|
||||||
|
Today the equivalent can be done as detailed here:
|
||||||
|
[https://medium.com/androiddevelopers/hilt-adding-components-to-the-hierarchy-96f207d6d92d](https://medium.com/androiddevelopers/hilt-adding-components-to-the-hierarchy-96f207d6d92d)
|
||||||
|
|
||||||
|
However this requires to inject a UserManager, and inject your dependencies from EntryPoints. Which doesn't seem to worth it for me.
|
||||||
|
|
||||||
|
Of course if you have Single Activity for your logged in state, Hilt works just fine.
|
||||||
|
|
||||||
|
### My case
|
||||||
|
|
||||||
|
In my case however, I still have multiple activities on some projects, so It would be great to easily clean caches when my user logs out.
|
||||||
|
|
||||||
|
I had the idea to borrow the concept [loadKoinModules](https://insert-koin.io/docs/reference/koin-core/start-koin#loading-modules-after-startkoin) with override which can be used just to do that.
|
||||||
|
So in this annotation processor I generate a module definition which works similarly.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
*Latest version:* 
|
||||||
|
|
||||||
|
// top level build.gradle
|
||||||
|
//..
|
||||||
|
```groovy
|
||||||
|
allprojects {
|
||||||
|
repositories {
|
||||||
|
// ...
|
||||||
|
maven {
|
||||||
|
url "https://maven.pkg.github.com/fknives/ReloadableHiltModule"
|
||||||
|
credentials {
|
||||||
|
username = project.findProperty("GITHUB_USERNAME") ?: System.getenv("GITHUB_USERNAME")
|
||||||
|
password = project.findProperty("GITHUB_TOKEN") ?: System.getenv("GITHUB_TOKEN")
|
||||||
|
}
|
||||||
|
// how to get token
|
||||||
|
// https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
// local build.gradle
|
||||||
|
```groovy
|
||||||
|
kapt {
|
||||||
|
correctErrorTypes = true
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation "org.fnives.library.reloadable.module:annotation:$latest_version"
|
||||||
|
kapt "org.fnives.library.reloadable.module:annotation-processor:$latest_version"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Create your ModuleAnnotation, example:
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
import org.fnives.library.reloadable.module.annotation.ReloadableModule
|
||||||
|
|
||||||
|
@ReloadableModule
|
||||||
|
@Target(AnnotationTarget.CONSTRUCTOR)
|
||||||
|
@Retention(AnnotationRetention.SOURCE)
|
||||||
|
annotation class LoggedInModuleInject
|
||||||
|
```
|
||||||
|
|
||||||
|
Apply to your classes such as:
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
class ContentRepository @LoggedInModuleInject constructor(private val contentGenerator: ContentGenerator) {
|
||||||
|
```
|
||||||
|
|
||||||
|
Where you want to reload the module, inject the generated Helper class:
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class LogoutUseCase @Inject constructor(
|
||||||
|
private val reloadLoggedInModuleInjectModule: ReloadLoggedInModuleInjectModule
|
||||||
|
) {
|
||||||
|
|
||||||
|
fun invoke() {
|
||||||
|
reloadLoggedInModuleInjectModule.reload()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
Loading…
Add table
Add a link
Reference in a new issue