我们说我有三个Dagger模块:
@Module()
public class MainModule {
private Application application;
public MainModule(Application application) {
this.application = application;
}
@Provides
@Singleton
Application provideApplication() {
return application;
}
@Provides
Something provideSomething(Application application) {
return new Something(application);
}
}
@Module()
public class SubModule1 {
private Activity activity;
public SubModule1(Activity activity) {
this.activity = activity;
}
@Provides
@Singleton
Activity provideActivity() {
return activity;
}
@Provides
SomethingElse provideSomethingElse(Activity activity) {
return new SomethingElse(activity);
}
}
@Module()
public class SubModule2 {
private Activity activity;
public SubModule2(Activity activity) {
this.activity = activity;
}
@Provides
@Singleton
Activity provideActivity() {
return activity;
}
@Provides
Anything provideAnything(Activity activity) {
return new Anything(activity);
}
}
现在假设我想做这样的事情:
public class MyApplication extends Application {
...
@Override
public void onCreate() {
super.onCreate();
objectGraph = ObjectGraph.create(new MainModule(this));
objectGraph.inject(this);
}
}
public class MyActivity1 extends Activity {
...
@Override
public void onCreate() {
super.onCreate();
objectGraph = ((MyApplication) getApplication()).getObjectGraph().plus(new SubModule1(this)
objectGraph.inject(this);
}
}
public class MyActivity2 extends Activity {
...
@Override
public void onCreate() {
super.onCreate();
objectGraph = ((MyApplication) getApplication()).getObjectGraph().plus(new SubModule2(this)
objectGraph.inject(this);
}
}
我也有可能发生这样的课程:
public class TestClass {
@Inject
SomethingElse somethingElse;
@Inject
Anything anything;
}
实施此方法的正确方法是什么?我应该如何使用包括, addsTo ,注入,库,完整和加()
答案 0 :(得分:0)
我通常按如下方式设置Dagger:
像这样扩展应用程序:
public class InjectingApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
objectGraph = ObjectGraph.create(new MainModule(this));
objectGraph = ObjectGraph.create(new SubModule1(this));
objectGraph = ObjectGraph.create(new ActivityModule());
objectGraph.inject(this);
}
}
然后有一个模块用于添加对您的活动的引用(在此实例中称为ActivityModule.java):
@Module(
injects = {
MyActivity1.class,
MyActivity2.class }
) public class ActivityModule { }
然后您的活动将如下所示:
public class MyActivity1 extends Activity {
@Inject
Something something;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((InjectingApplication) getApplication()).inject(this);
}
}
最后,您的模块将如下所示:
@Module()
public class MainModule {
private Context context;
public MainModule(Context context) {
this.context = context;
}
@Provides
Something provideSomething(Context context) {
return new Something(context);
}
}
@Module()
public class SubModule1 {
private Context context;
public SubModule1(Context context) {
this.context = context;
}
@Provides
SomethingElse provideSomethingElse(Context context) {
return new SomethingElse(context);
}
}