Dagger by Square
dependencies {compile 'com.squareup.dagger:dagger:1.2.1' ... }
class Thermosiphon implements Pump {
private final Heater heater;
@Inject
Thermosiphon(Heater heater) {
this.heater = heater;
}
...
}
class CoffeeMaker {
@Inject Heater heater;
@Inject Pump pump;
...
}
@Module
class DripCoffeeModule {
@Provides Heater provideHeater() {
return new ElectricHeater();
}
}
public static void main(String[] args) { ObjectGraph og = ObjectGraph.create(new DripCoffeeModule());// og.plus(new AnotherCoffeeModule); CoffeeApp coffeeApp = og.get(CoffeeApp.class);coffeeApp.brew(); }
@Provides @Singleton Heater provideHeater() {
return new ElectricHeater();
} @Singleton
class CoffeeMaker {
...
}
class BigCoffeeMaker { @Inject Provider<Filter>filterProvider; public void brew(int numberOfPots) { ... for (int p = 0; p < numberOfPots; p++) { //new filter every time. maker.addFilter(filterProvider.get()); maker.addCoffee(...); ... } } }
class ExpensiveCoffeeMaker {
@Inject @Named("water") Heater waterHeater;
@Inject @Named("hot plate") Heater hotPlateHeater;
...
}
@Provides @Named("hot plate") Heater provideHotPlateHeater() {
return new ElectricHeater(70);
}
@Provides @Named("water") Heater provideWaterHeater() {
return new ElectricHeater(93);
}
class GridingCoffeeMaker { @Inject Lazy<Grinder>lazyGrinder; public void brew() { while (needsGrinding()) { // Grinder created once on first call to .get() and cached. lazyGrinder.get().grind(); } } }
@Inject @Singleton Lazy<Foo> foo; // ??? [ERROR]: Graph validation failed: You have these unused @Provider methods:
1. coffee.DripCoffeeModule.provideChiller()