11
Dagger Presenter : Ramesh Akula http://about.me/aramesh

Dagger1

Embed Size (px)

Citation preview

Page 1: Dagger1

Dagger

Presenter : Ramesh Akula http://about.me/aramesh

Page 2: Dagger1

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.squareup.dagger:dagger:1.2.+' provided 'com.squareup.dagger:dagger-compiler:1.2.+'

}

Gradle Dependencies

Page 3: Dagger1

❖ @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

Page 4: Dagger1

@Module( complete = false, library = true)public class DemoModule {

//Provide log object @Provides @Singleton public Log provideLog() { return new LogImpl(); } }

Create a Module (@Module)

Page 5: Dagger1

@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)

Page 6: Dagger1

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

Page 7: Dagger1

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)

Page 8: Dagger1

@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

Page 9: Dagger1

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

Page 10: Dagger1

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

Page 11: Dagger1

Thank You!