Dagger
Presenter : Ramesh Akula
http://about.me/aramesh
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.squareup.dagger:dagger:1.2.+'
provided 'com.squareup.dagger:dagger-compiler:1.2.+'
}
Gradle Dependencies
❖ @Module : Identify this class as a Dagger module.
❖ @Inject : Classes where this module is going to inject any of
its dependencies. Specify those classes that are directly
injected into object graph.
❖ @Provides: Identify method as an injection provider. The name
of the method doesn’t matter, it only relies on what class type
is provided.
Introduction
@Module(
complete = false,
library = true
)
public class DemoModule {
//Provide log object
@Provides
@Singleton
public Log provideLog() {
return new LogImpl();
}
}
Create a Module (@Module)
@Module(
injects = {
BaseApp.class,
MainActivity.class,
},
includes = {
DemoModule.class,
}
)
public class AppModule {
private BaseApp app;
public AppModule(BaseApp app) {
this.app = app;
}
@Provides
@Singleton
public Context provideApplicationContext() {
return app;
}
}
Create a Root Module (@Module)
public class BaseApp extends Application {
private ObjectGraph objectGraph;
@Override
public void onCreate() {
super.onCreate();
injectDependencies();
}
private void injectDependencies() {
objectGraph = ObjectGraph.create(new AppModule(this));
objectGraph.inject(this);
}
public void inject(Object object) {
objectGraph.inject(object);
}
}
Create an Object graph
public class MainActivity extends AppCompatActivity {
@Inject
Log mLog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Add to the object graph.
((BaseApp) getApplication()).inject(this);
}
Inject Dependencies (@Inject)
@Module(
complete = false,
library = true
)
public class DemoModule {
//……
@Provides
@Singleton
@Named(“login”)
public PreferencesEndPoint provideLoginPreferencesEndPoint(final Context context)
{
return new PreferenceEndPointImpl(context, “login”);
}
@Named - annotation
public class MainActivity extends AppCompatActivity {
@Inject
Log mLog;
@Inject
@Named(“login”)
PreferencesEndPoint loginEndPoint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Add to the object graph.
((BaseApp) getApplication()).inject(this);
//……
}
@Named - annotation
public class MainActivity extends AppCompatActivity {
@Inject
Log mLog;
@Inject
Provider<Log> mLogProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Add to the object graph.
((BaseApp) getApplication()).inject(this);
//……
// Request new object every time requested
Log log = mLogProvider.get();
}
@Inject Provider
Thank You!

Dagger1

  • 1.
    Dagger Presenter : RameshAkula http://about.me/aramesh
  • 2.
    dependencies { compile fileTree(dir:'libs', include: ['*.jar']) compile 'com.squareup.dagger:dagger:1.2.+' provided 'com.squareup.dagger:dagger-compiler:1.2.+' } Gradle Dependencies
  • 3.
    ❖ @Module :Identify this class as a Dagger module. ❖ @Inject : Classes where this module is going to inject any of its dependencies. Specify those classes that are directly injected into object graph. ❖ @Provides: Identify method as an injection provider. The name of the method doesn’t matter, it only relies on what class type is provided. Introduction
  • 4.
    @Module( complete = false, library= true ) public class DemoModule { //Provide log object @Provides @Singleton public Log provideLog() { return new LogImpl(); } } Create a Module (@Module)
  • 5.
    @Module( injects = { BaseApp.class, MainActivity.class, }, includes= { DemoModule.class, } ) public class AppModule { private BaseApp app; public AppModule(BaseApp app) { this.app = app; } @Provides @Singleton public Context provideApplicationContext() { return app; } } Create a Root Module (@Module)
  • 6.
    public class BaseAppextends Application { private ObjectGraph objectGraph; @Override public void onCreate() { super.onCreate(); injectDependencies(); } private void injectDependencies() { objectGraph = ObjectGraph.create(new AppModule(this)); objectGraph.inject(this); } public void inject(Object object) { objectGraph.inject(object); } } Create an Object graph
  • 7.
    public class MainActivityextends AppCompatActivity { @Inject Log mLog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Add to the object graph. ((BaseApp) getApplication()).inject(this); } Inject Dependencies (@Inject)
  • 8.
    @Module( complete = false, library= true ) public class DemoModule { //…… @Provides @Singleton @Named(“login”) public PreferencesEndPoint provideLoginPreferencesEndPoint(final Context context) { return new PreferenceEndPointImpl(context, “login”); } @Named - annotation
  • 9.
    public class MainActivityextends AppCompatActivity { @Inject Log mLog; @Inject @Named(“login”) PreferencesEndPoint loginEndPoint; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Add to the object graph. ((BaseApp) getApplication()).inject(this); //…… } @Named - annotation
  • 10.
    public class MainActivityextends AppCompatActivity { @Inject Log mLog; @Inject Provider<Log> mLogProvider; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Add to the object graph. ((BaseApp) getApplication()).inject(this); //…… // Request new object every time requested Log log = mLogProvider.get(); } @Inject Provider
  • 11.