Java Dagger Android视图注入错误
我花了很长时间才弄明白如何设置匕首依赖项来满足这段代码的本质 我有一个控制器WelcomeScreen(它扩展了路径-一个砂浆/流动的东西),它声明它注入了一个ThingView。然后我注入ThingView的提供者,我的ThingView构造函数有一个带有活动的@inject注释,我在别处提供了这个注释 我最终还是遇到了这个错误:没有为members/com注册注入……view.ThingView。必须将其显式添加到某个模块中的“injects”选项中 想想我错过了什么Java Dagger Android视图注入错误,java,android,dependency-injection,dagger,mortar,Java,Android,Dependency Injection,Dagger,Mortar,我花了很长时间才弄明白如何设置匕首依赖项来满足这段代码的本质 我有一个控制器WelcomeScreen(它扩展了路径-一个砂浆/流动的东西),它声明它注入了一个ThingView。然后我注入ThingView的提供者,我的ThingView构造函数有一个带有活动的@inject注释,我在别处提供了这个注释 我最终还是遇到了这个错误:没有为members/com注册注入……view.ThingView。必须将其显式添加到某个模块中的“injects”选项中 想想我错过了什么 public clas
public class WelcomeScreen extends Path {
@dagger.Module(
injects = {
ThingView.class,
},
addsTo = ActivityModule.class)
public class Module {
}
@Singleton
public static class Presenter extends ViewPresenter<WelcomeView> {
@Inject
public Presenter(
Provider<ThingView> thingViewProvider,) {
// This causes an error: No inject registered for members/com.....view.ThingView.
// You must explicitly add it to the 'injects' option in one of your modules.
thingViewProvider.get()
}
}
}
public class ThingView extends LinearLayout {
@Inject
public ThingView(Activity activity) {
super(activity);
init(activity);
}
// Note - this might not be used anywhere.
public ThingView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
ObjectGraphService.inject(context, this);
View view = View.inflate(context, R.layout.view_thread_pack, this);
ButterKnife.inject(view);
}
}
砂浆的工作原理并非如此。无法将视图插入演示者。而是将演示者插入到视图中。下面是我发现的几个示例,它们显示了与您所做的类似的设置,但这并不是砂浆的工作原理。无法将视图插入演示者。而是将演示者插入到视图中。下面是我发现的几个示例,它们显示了与您所做的类似的设置在这种情况下,这不是我的屏幕/演示者的视图,而是我想在演示者获取某些内容时创建的许多视图。嗯。您需要在上下文之外使用布局充气器创建视图。如果您将一个上下文传递到一个模块中,该模块可以在提供的方法中膨胀一个视图。但是膨胀需要一个布局,对吗?这意味着膨胀视图的类需要知道如何膨胀视图,这是我不喜欢的。(查看这些示例,顺便说一句,我很欣赏!)我想你也可以通过编程方式构建视图。像创建一个线性布局,添加另一个视图等。在提供的方法中完成所有这些。在这种情况下,这不是我的屏幕/演示者的视图,而是我想在演示者获取一些东西时创建的视图。嗯。您需要在上下文之外使用布局充气器创建视图。如果您将一个上下文传递到一个模块中,该模块可以在提供的方法中膨胀一个视图。但是膨胀需要一个布局,对吗?这意味着膨胀视图的类需要知道如何膨胀视图,这是我不喜欢的。(查看这些示例,顺便说一句,我很欣赏!)我想你也可以通过编程方式构建视图。像创建一个线性布局,添加另一个视图等。所有这些都在一个方法内完成。
@Module(addsTo = ApplicationModule.class, library = true)
public class ActivityModule {
@Provides
public ThreadPackView providesThreadPackView() {
return new ThreadPackView(activity);
}
}