java – Dagger 2活动注入不起作用
我正在尝试新的匕首2,这是我第一次实施它,但我不能让它工作.我想我得到了这个概念,我理解了
here的例子
我尝试复制相同的结构只是为我的例子稍作修改. 这是扩展Graph的AppComponent,我定义了我想要的类. @ApplicationScope @Component(modules = {AppModule.class,DataModule.class}) public interface EFAppComponent extends EFGraph { /** * An initializer that creates the graph from an application. */ public final static class Initializer { private Initializer() { } // No instances. public static EFAppComponent init(EFApp app) { return Dagger_EFAppComponent.builder() .appModule(new AppModule(app)) .build(); } } } public interface EFGraph { public void inject(EFApp app); public ImageLoader imageLoader(); public EventBus eventBus(); } 然后在每个模块中我提供相应的类.从这里一切都很好,Dagger接缝正确构建Dagger_EFAppComponent. 然后在Application类中使用构造函数初始化 component = EFAppComponent.Initializer.init(this); component.inject(this); 然后我的目标是在我的活动中注入ImageLoader和EventBus.为此,我创建了一个ActivityComponent. @ActivityScope @Component( dependencies = EFAppComponent.class,modules = ActivityModule.class ) public interface ActivityComponent { public void inject(BaseActivity activity); } 然后从我的活动我打电话给注入. activityComponent = Dagger_ActivityComponent.builder() .eFAppComponent(component) .activityModule(new ActivityModule(this)) .build(); activityComponent.inject(this); 因为我应该在注入注入方法之后在我的活动中声明@Inject EventBus eventBus.嗯,不是. 因此,在逐步调试和跟踪我的应用程序和示例后,我意识到Dagger_ActivityComponent未正确构建. private final ActivityModule activityModule; private final EFAppComponent eFAppComponent; private Dagger_ActivityComponent(Builder builder) { assert builder != null; this.activityModule = builder.activityModule; this.eFAppComponent = builder.eFAppComponent; initialize(); } 如果initialize方法为空,并且没有将Provider声明为变量. 我错过了什么吗?我已经整整一天努力让它发挥作用,但我没有成功. 感谢帮助. 解决方法
嗯…在这一整天花费之后,我决定发布它,5分钟后我找到了解决方案.
我正在为我的所有活动使用BaseActivity,并且我认为我可以使用它来注入我的组件但接缝这是不可能的. 所以我只是在ActivityComponent中改变这一行 public void inject(BaseActivity activity) 至 public void inject(MainActivity activity) 所以我要注入依赖项的活动的名称… 是什么让我想到了一个新问题.如何实现基本组件来处理我的所有活动?或者我必须为每个想要DI的视图/活动/片段创建一个组件? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |