所以我正在学习Dagger 2,有一点我不太关注。 所以我理解在组件中你需要指定可用于注入的活动:
Singleton
@Component(modules={AppModule.class, NetModule.class})
public interface NetComponent {
void inject(MainActivity activity);
}
首先我为什么要指定这个? (我从不使用变量活动)。
但主要的问题是,我可以说我有10个不同的活动或片段,我需要在这里列出它们吗?这是正确的做法,还是我们可以注入应用程序?如果我想在整个应用程序中使用NetComponent,那么正确的做法是什么。
由于
答案 0 :(得分:1)
如果您的每项活动都有一个供应组件,那么是的。您必须为每个人编写inject()
方法。
另请注意,您不能在基类中使用注入,因为它会产生此错误:https://github.com/google/dagger/issues/214
好:
@Singleton
@Component(modules={AppModule.class, NetModule.class})
public interface NetComponent {
void inject(MainActivity activity);
void inject(SplashActivity activity);
void inject(AnotherActivity activity);
}
为:
@Singleton
@Component(modules={AppModule.class, NetModule.class})
public interface NetComponent {
void inject(BaseActivity activity);
}
此外,如果你不想注射,但只获得你的API服务等,你不能注射,但使用:
@Singleton
@Component(modules={AppModule.class, NetModule.class})
public interface NetComponent {
SomeNetworkOrApiClass getNetworking();
}
只需在您需要的时候从您的组件中获取网络。
尝试阅读这些有用的文章:
https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2
https://github.com/konmik/konmik.github.io/wiki/Snorkeling-with-Dagger-2