匕首注射用于不同的活动

时间:2016-04-25 16:28:17

标签: android dagger-2

所以我正在学习Dagger 2,有一点我不太关注。 所以我理解在组件中你需要指定可用于注入的活动:

Singleton
@Component(modules={AppModule.class, NetModule.class})
public interface NetComponent {
   void inject(MainActivity activity);
}

首先我为什么要指定这个? (我从不使用变量活动)。

但主要的问题是,我可以说我有10个不同的活动或片段,我需要在这里列出它们吗?这是正确的做法,还是我们可以注入应用程序?如果我想在整个应用程序中使用NetComponent,那么正确的做法是什么。

由于

1 个答案:

答案 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