-
-
Save ronshapiro/26553da7cd3f8ba444eb83fabfe2a500 to your computer and use it in GitHub Desktop.
Reusable injections
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Parent { | |
// Somewhere in here, a lot of external service modules are included and contribute their `Service` impls to this multibinding | |
@Inject lateinit var services: Map<String, Provider<Service>> | |
fun showChild() { | |
addChildController(serviceKey = "barServiceKey") // Key into the services map | |
} | |
} | |
// Child class could be some presentation UI, reusable and just shows data based on a given service | |
class Child { | |
// Currently, I have to inject this services map as a whole | |
// I'd like to get this down to something that only exposes the Service for better isolation | |
@Inject lateinit var services: Map<String, Provider<Service>> | |
lateinit var actualService: Service | |
// So what I'd like to do is something that lets me swizzle this down to be able to do this based on what's found at compile time | |
// @Inject lateinit var service: Service | |
fun performInjection() { | |
// do injection... | |
actualService = services[getArguments()["serviceKey"]].get() | |
} | |
fun showUi() { | |
with(actualService) { | |
// Show data | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment