【发布时间】:2015-11-27 01:06:52
【问题描述】:
我正在研究来自许多来源的 Dagger 2,例如:http://fernandocejas.com/2015/04/11/tasting-dagger-2-on-android/ 但我仍然没有找到我的问题的答案。
我在非常复杂的应用程序中工作,其中包含数十个片段和几个活动,我想在其中使用 DI(匕首 2)。对于所有这些片段和活动,我有一个 BaseActivity 和一个 BaseFragment。但是,据我阅读和尝试,为了在我的 MainActivity 中使用 @Inject,我必须在 Component 接口中指定它,并在 onCreate 方法中调用 getApplicationComponent().inject(this)。当我仅对 BaseActivity 执行此操作时,MainActivity 中的 @Inject 注释字段永远不会被注入。更糟糕的是,直到执行代码的特定部分并抛出 NPE,我才知道这一点。
到目前为止,这对我来说是一个交易破坏者,因为这可能是许多崩溃的根源。我需要在 Component 接口中指定数十个片段和活动,并且不要忘记在每个 onCreate 方法中调用注入。
我很高兴听到任何解决方案,因为我真的很想使用 DI..
代码示例:
@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
void inject(BaseActivity baseActivity);
Analytics analytics();
}
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getApplicationComponent().inject(this);
}
}
public class MainActivity extends BaseActivity {
@Inject
Analytics analytics;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
analytics.log("event1"); // THROWS NPE!
}
}
【问题讨论】:
-
可能
analytics为空
标签: android dependency-injection dagger-2