From 81957c65ed4dc5abf2cbdbce0418e0d01430b63a Mon Sep 17 00:00:00 2001 From: hm Date: Tue, 7 Jan 2020 14:30:08 +0700 Subject: [PATCH] #7 Two commands for the price of one --- .../id/mustofa/atm/factory/CommandRouterFactory.kt | 9 ++++++++- .../kotlin/id/mustofa/atm/module/HelloWorldModule.kt | 4 ++++ .../kotlin/id/mustofa/atm/module/LoginCommandModule.kt | 4 ++++ src/main/kotlin/id/mustofa/atm/router/CommandRouter.kt | 10 +++------- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/id/mustofa/atm/factory/CommandRouterFactory.kt b/src/main/kotlin/id/mustofa/atm/factory/CommandRouterFactory.kt index e033a6a..33051ae 100644 --- a/src/main/kotlin/id/mustofa/atm/factory/CommandRouterFactory.kt +++ b/src/main/kotlin/id/mustofa/atm/factory/CommandRouterFactory.kt @@ -1,6 +1,7 @@ package id.mustofa.atm.factory import dagger.Component +import id.mustofa.atm.module.HelloWorldModule import id.mustofa.atm.module.LoginCommandModule import id.mustofa.atm.module.SystemOutModule import id.mustofa.atm.router.CommandRouter @@ -12,7 +13,13 @@ import id.mustofa.atm.router.CommandRouter * we can annotate it with @Component to have Dagger generate an implementation * for us: DaggerCommandRouterFactory. */ -@Component(modules = [LoginCommandModule::class, SystemOutModule::class]) +@Component( + modules = [ + HelloWorldModule::class, + LoginCommandModule::class, + SystemOutModule::class + ] +) interface CommandRouterFactory { // CommandRouter constructor should annotated with @Inject diff --git a/src/main/kotlin/id/mustofa/atm/module/HelloWorldModule.kt b/src/main/kotlin/id/mustofa/atm/module/HelloWorldModule.kt index 7ca7a1e..7a9a356 100644 --- a/src/main/kotlin/id/mustofa/atm/module/HelloWorldModule.kt +++ b/src/main/kotlin/id/mustofa/atm/module/HelloWorldModule.kt @@ -2,6 +2,8 @@ package id.mustofa.atm.module import dagger.Binds import dagger.Module +import dagger.multibindings.IntoMap +import dagger.multibindings.StringKey import id.mustofa.atm.model.HelloWorldCommand import id.mustofa.atm.model.base.Command @@ -9,5 +11,7 @@ import id.mustofa.atm.model.base.Command abstract class HelloWorldModule { @Binds + @IntoMap + @StringKey("hello") abstract fun helloWorldCommand(command: HelloWorldCommand): Command } \ No newline at end of file diff --git a/src/main/kotlin/id/mustofa/atm/module/LoginCommandModule.kt b/src/main/kotlin/id/mustofa/atm/module/LoginCommandModule.kt index bb0b7fa..75017e1 100644 --- a/src/main/kotlin/id/mustofa/atm/module/LoginCommandModule.kt +++ b/src/main/kotlin/id/mustofa/atm/module/LoginCommandModule.kt @@ -2,6 +2,8 @@ package id.mustofa.atm.module import dagger.Binds import dagger.Module +import dagger.multibindings.IntoMap +import dagger.multibindings.StringKey import id.mustofa.atm.model.LoginCommand import id.mustofa.atm.model.base.Command @@ -9,5 +11,7 @@ import id.mustofa.atm.model.base.Command abstract class LoginCommandModule { @Binds + @IntoMap + @StringKey("login") abstract fun loginCommand(command: LoginCommand): Command } \ No newline at end of file diff --git a/src/main/kotlin/id/mustofa/atm/router/CommandRouter.kt b/src/main/kotlin/id/mustofa/atm/router/CommandRouter.kt index 3694c03..6624bf4 100644 --- a/src/main/kotlin/id/mustofa/atm/router/CommandRouter.kt +++ b/src/main/kotlin/id/mustofa/atm/router/CommandRouter.kt @@ -11,13 +11,9 @@ import javax.inject.Inject * The @Inject annotation indicates to Dagger that when we ask for a * CommandRouter, Dagger should call new CommandRouter(). */ -class CommandRouter @Inject constructor(command: Command) { - - private val commands = mutableMapOf() - - init { - commands[command.key()] = command - } +class CommandRouter @Inject constructor( + private val commands: Map +) { fun route(input: String): Status { val inputs = split(input)