@@ -9,7 +9,7 @@ DependencyProperty
9
9
10
10
- simple in defining and resolving dependencies.
11
11
- usable in classes accessible to Application instance like Activity, Fragment, and etc.
12
- - able to constructor injection to ViewModel without affecting other classes.
12
+ - able to inject to ViewModel's constructor without affecting other classes.
13
13
- less code for testing than Dagger Hilt.
14
14
- easy to use in multi-module and Dynamic Feature Module.
15
15
- easy to manage modules lifecycle.
@@ -18,19 +18,19 @@ DependencyProperty
18
18
19
19
## Usage
20
20
### Configure DependencyProperty in Application
21
- Application class must implements ` DependencyModulesHolder ` like below .
21
+ Application class must implements ` DependencyModulesHolder ` like the following .
22
22
23
23
``` kt
24
24
class App : Application (), DependencyModulesHolder {
25
25
override val dependencyModules: DependencyModules by dependencyModules(AppModule (this ), CoroutinesModule ())
26
26
}
27
27
```
28
28
29
- You can pass variable number of arguments( ` DependencyModule ` ) to ` dependencyModules() ` .
29
+ You can pass ` DependencyModule ` to ` dependencyModules() ` as variable number of arguments .
30
30
31
31
### Define dependencies in DependencyModule
32
32
` DependencyModule ` is marker interface.
33
- You can define dependencies as property and function.
33
+ You can define dependencies as property or function.
34
34
35
35
``` kt
36
36
open class CoroutinesModule : DependencyModule {
@@ -41,7 +41,7 @@ open class CoroutinesModule : DependencyModule {
41
41
}
42
42
```
43
43
44
- You can resolve other DependencyModule using below extension methods.
44
+ You can resolve other DependencyModule using the following extension methods.
45
45
46
46
- ` inline fun <reified T : DependencyModule> Application.dependencyModule(): T `
47
47
- ` inline fun <reified T : DependencyModule> FragmentActivity.dependencyModule(): T `
@@ -60,13 +60,13 @@ class AppModule(private val application: Application) : DependencyModule {
60
60
}
61
61
```
62
62
63
- - If You want to define dependency as singleton, you can define property as lazy.
64
- - If You want to define dependency as not singleton, you can define property as getter.
65
- - If You want to define dependency using parameters, you can define property as function.
63
+ - If You want to define dependency as singleton, you can use lazy.
64
+ - If You want to define dependency as not singleton, you can use getter.
65
+ - If You want to define dependency using parameters, you can use function.
66
66
67
67
### Resolve dependencies
68
68
69
- You can resolve dependency by delegated property using below extension methods.
69
+ You can resolve dependency by delegated property using the following extension methods.
70
70
71
71
- ` fun <T: DependencyModule, R> Application.dependency<T, R>(resolve: (T) -> R): Lazy<R> `
72
72
- ` fun <T: DependencyModule, R> FragmentActivity.dependency<T, R>(resolve: (T) -> R): Lazy<R> `
@@ -75,14 +75,22 @@ You can resolve dependency by delegated property using below extension methods.
75
75
- ` fun <T: DependencyModule, R> Service.dependency<T, R>(resolve: (T) -> R): Lazy<R> `
76
76
- ` fun <T: DependencyModule, R> Context.dependency<T, R>(resolve: (T) -> R): Lazy<R> `
77
77
78
- Activity's example is below .
78
+ Activity's example is the following .
79
79
80
80
``` kt
81
81
class MainActivity : AppCompatActivity () {
82
82
private val loadItemsUseCase by dependency<AppModule , LoadItemsUseCase > { it.loadItemsUseCase }
83
83
}
84
84
```
85
85
86
+ Another example is the following.
87
+
88
+ ``` kt
89
+ class MainActivity : AppCompatActivity () {
90
+ private val loadItemsUseCase: LoadItemsUseCase by lazy { dependencyModule<AppModule >().loadItemsUseCase }
91
+ }
92
+ ```
93
+
86
94
For testing, ViewModel inherits AndroidViewModel and its constructor is annotated ` @JvmOverloads ` .
87
95
88
96
``` kt
@@ -164,7 +172,7 @@ class App: Application(), DependencyModulesHolder {
164
172
}
165
173
```
166
174
167
- In Dynamic Feature Module, you can add DependencyModule dynamically using below extension methods.
175
+ In Dynamic Feature Module, you can add DependencyModule dynamically using the following extension methods.
168
176
169
177
``` kt
170
178
val Application .dependencyModules: DependencyModules
@@ -181,7 +189,7 @@ val Context.dependencyModules: DependencyModules
181
189
get() = (applicationContext as Application ).dependencyModules
182
190
```
183
191
184
- Activity's example is below .
192
+ Activity's example is the following .
185
193
186
194
``` kt
187
195
class MainActivity : AppCompatActivity () {
@@ -194,13 +202,13 @@ class MainActivity : AppCompatActivity() {
194
202
195
203
### Lifecycle of DependencyModule
196
204
197
- You can manage lifecycle of DependencyModule below methods.
205
+ You can manage lifecycle of DependencyModule using the following methods.
198
206
199
207
- ` fun <T: DependencyModule> DependencyModules.addModule(module: T) `
200
208
- ` fun <T: DependencyModule> DependencyModules.removeModule<T>() `
201
209
- ` fun <T: DependencyModule> DependencyModules.replaceModule(module: T) `
202
210
203
- Activity's example is below .
211
+ Activity's example is the following .
204
212
205
213
``` kt
206
214
class MainActivity : AppCompatActivity () {
0 commit comments