Links & DependenciesRims.javaTires.javaWheelsModule.javaRemote.javaCar.javaEngine.javaWheels.javaMainActivity.javaCarComponent.java
Dagger 2 dependencies:
package com.codinginflow.dagger2example; public class Rims { //we don't own this class so we can't annotate it with @Inject }
package com.codinginflow.dagger2example; import android.util.Log; public class Tires { //we don't own this class so we can't annotate it with @Inject private static final String TAG = "Car"; public void inflate() { Log.d(TAG, "Tires inflated"); } }
package com.codinginflow.dagger2example; import dagger.Module; import dagger.Provides; @Module public class WheelsModule { @Provides static Rims provideRims() { return new Rims(); } @Provides static Tires provideTires() { Tires tires = new Tires(); tires.inflate(); return tires; } @Provides static Wheels provideWheels(Rims rims, Tires tires) { return new Wheels(rims, tires); } }
package com.codinginflow.dagger2example; import android.util.Log; import javax.inject.Inject; public class Remote { private static final String TAG = "Car"; @Inject public Remote() { } public void setListener(Car car) { Log.d(TAG, "Remote connected"); } }
package com.codinginflow.dagger2example; import android.util.Log; import javax.inject.Inject; public class Car { private static final String TAG = "Car"; private Engine engine; private Wheels wheels; @Inject public Car(Engine engine, Wheels wheels) { this.engine = engine; this.wheels = wheels; } @Inject public void enableRemote(Remote remote) { remote.setListener(this); } public void drive() { Log.d(TAG, "driving..."); } }
package com.codinginflow.dagger2example; import javax.inject.Inject; public class Engine { @Inject public Engine() { } }
package com.codinginflow.dagger2example; public class Wheels { //we don't own this class so we can't annotate it with @Inject private Rims rims; private Tires tires; public Wheels(Rims rims, Tires tires) { this.rims = rims; this.tires = tires; } }
package com.codinginflow.dagger2example; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import javax.inject.Inject; public class MainActivity extends AppCompatActivity { @Inject Car car; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); CarComponent component = DaggerCarComponent.create(); component.inject(this); car.drive(); } }
package com.codinginflow.dagger2example; import dagger.Component; @Component(modules = WheelsModule.class) public interface CarComponent { Car getCar(); void inject(MainActivity mainActivity); }