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 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
7. 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)
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 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
10. 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