Skip to content

Commit dfa9b38

Browse files
naoussinappy29
andauthored
[KTLN-889] Kotlin DI Frameworks (#1105)
* Undo wrong file * code changes * Restoring deleted file * code refactoring * code refactor --------- Co-authored-by: nappy29 <[email protected]>
1 parent 43d5a38 commit dfa9b38

File tree

10 files changed

+157
-0
lines changed

10 files changed

+157
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>com.baeldung</groupId>
8+
<artifactId>core-kotlin-modules</artifactId>
9+
<version>1.0.0-SNAPSHOT</version>
10+
</parent>
11+
12+
<artifactId>core-kotlin-design-patterns-1</artifactId>
13+
14+
<properties>
15+
<koin-core-jvm.version>3.5.6</koin-core-jvm.version>
16+
<koin-core.version>3.4.0</koin-core.version>
17+
<koin-test.version>3.4.0</koin-test.version>
18+
<kodein-di-jvm.version>7.11.0</kodein-di-jvm.version>
19+
<guice.version>5.0.1</guice.version>
20+
</properties>
21+
22+
<dependencies>
23+
<dependency>
24+
<groupId>io.insert-koin</groupId>
25+
<artifactId>koin-core-jvm</artifactId>
26+
<version>${koin-core-jvm.version}</version>
27+
</dependency>
28+
29+
<dependency>
30+
<groupId>io.insert-koin</groupId>
31+
<artifactId>koin-core</artifactId>
32+
<version>${koin-core.version}</version>
33+
</dependency>
34+
35+
<dependency>
36+
<groupId>io.insert-koin</groupId>
37+
<artifactId>koin-test</artifactId>
38+
<version>${koin-test.version}</version>
39+
<scope>test</scope>
40+
</dependency>
41+
42+
<dependency>
43+
<groupId>org.kodein.di</groupId>
44+
<artifactId>kodein-di-jvm</artifactId>
45+
<version>${kodein-di-jvm.version}</version>
46+
</dependency>
47+
48+
<dependency>
49+
<groupId>com.google.inject</groupId>
50+
<artifactId>guice</artifactId>
51+
<version>${guice.version}</version>
52+
</dependency>
53+
</dependencies>
54+
55+
56+
</project>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.baeldung.di
2+
3+
interface UserService {
4+
fun getUser(): String
5+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.baeldung.di
2+
3+
import com.baeldung.di.UserService
4+
5+
class UserServiceImpl : UserService {
6+
override fun getUser(): String = "John Doe"
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.baeldung.di.guice
2+
3+
import com.baeldung.di.UserService
4+
import com.google.inject.Guice
5+
import com.google.inject.Inject
6+
import com.google.inject.Injector
7+
import org.junit.jupiter.api.Assertions.assertEquals
8+
import org.junit.jupiter.api.Test
9+
10+
class GuiceUnitTest {
11+
@Inject
12+
private lateinit var userService: UserService
13+
14+
@Test
15+
fun `obtain dependency using guice`() {
16+
val injector: Injector = Guice.createInjector(UserModule())
17+
injector.injectMembers(this)
18+
19+
assertEquals("John Doe", userService.getUser())
20+
}
21+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.baeldung.di.guice
2+
3+
import com.baeldung.di.UserService
4+
import com.baeldung.di.UserServiceImpl
5+
import com.google.inject.AbstractModule
6+
7+
class UserModule : AbstractModule() {
8+
override fun configure() {
9+
bind(UserService::class.java).to(UserServiceImpl::class.java)
10+
}
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.baeldung.di.kodein
2+
3+
import com.baeldung.di.UserService
4+
import com.baeldung.di.UserServiceImpl
5+
import org.junit.jupiter.api.Test
6+
import org.kodein.di.DI
7+
import org.kodein.di.bind
8+
import org.kodein.di.instance
9+
import org.kodein.di.singleton
10+
import kotlin.test.assertEquals
11+
12+
val kodein = DI {
13+
bind<UserService>() with singleton { UserServiceImpl() }
14+
}
15+
16+
class KodeinUnitTest {
17+
private val userService: UserService by kodein.instance()
18+
19+
@Test
20+
fun `obtain dependency using kodein`(){
21+
assertEquals("John Doe", userService.getUser())
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.baeldung.di.kodein
2+
3+
4+
interface UserComponent {
5+
fun inject(app: KodeinUnitTest)
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.baeldung.di.koin
2+
3+
import com.baeldung.di.UserService
4+
import com.baeldung.di.UserServiceImpl
5+
import org.junit.jupiter.api.Assertions.assertEquals
6+
import org.junit.jupiter.api.Test
7+
import org.koin.core.context.startKoin
8+
import org.koin.dsl.module
9+
import org.koin.core.component.KoinComponent
10+
import org.koin.core.component.inject
11+
import org.koin.core.module.Module
12+
13+
14+
class DependencyInjectionUnitTest: KoinComponent {
15+
16+
val appModule: Module = module { single<UserService> { UserServiceImpl() } }
17+
private val service: UserService by inject()
18+
19+
@Test
20+
fun `DI demonstration with Koin`() {
21+
startKoin {
22+
modules(appModule)
23+
}
24+
assertEquals("John Doe", service.getUser())
25+
}
26+
}

core-kotlin-modules/core-kotlin-design-patterns/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@
1313
<version>1.0.0-SNAPSHOT</version>
1414
</parent>
1515

16+
1617
</project>

core-kotlin-modules/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
<module>core-kotlin-operators</module>
7676
<module>core-kotlin-concurrency-3</module>
7777
<module>core-kotlin-concurrency-4</module>
78+
<module>core-kotlin-design-patterns-1</module>
7879
</modules>
7980

8081
</project>

0 commit comments

Comments
 (0)