我在Dagger注入错误的BehaviorSubject时遇到问题。声明成员变量时,似乎忽略了我的@Named(“”)注释。我有一个半复杂的任务。我需要一个可以在服务中直接访问的behaviorSubject,放入多个包装对象/接口中,然后再将其注入。
我遇到类似的错误。 java.lang.IllegalStateException:创建对象图时出错: 公共io.reactivex.subjects.PublishSubject所需的io.reactivex.subjects.PublishSubject xxxxx.android.service.xxxx.myBehaviorSubject
当尝试将其注入我的服务时。
@Inject
@Named(NAME)
lateinit var myBehaviorSubject: PublishSubject<MYOBJECT>
第一个示例有效。但是我想在没有成员变量的情况下做到这一点(那么使用dagger的意义是什么。),并且当其他人尝试创建主题注入时,我也不想创建将来的错误。
PublishSubject<MYOBJECT> LPS = null;
@Provides
@Named(NAME)
@Singleton
PublishSubject<MYOBJECT> provideSubjectRx() {
if(LPS == null){
LPS = PublishSubject.create();
}
return LPS;
}
由于某些原因,以下操作无效。无法建立图表。这就是我想要的。
@Provides
@Named(NAME)
@Singleton
PublishSubject<MYOBJECT> provideSubjectRx(PublishSubject<MYOBJECT> LPS)
{
if(LPS == null){
LPS = PublishSubject.create();
}
return LPS;
}
我必须包括这个。
@Provides
PublishSubject<MYOBJECT> providePublishSubject() {
PublishSubject<MYOBJECT> publishSubject = PublishSubject.create();
return publishSubject;
}
很奇怪..那就是第一个功能应该做的。好像Dagger出于某种原因不想使用它...现在我得到了发布主题的不同实例,这根本不是我所需要的。 ApiProvider是使用ProvideSubjectRx构建的,然后我的SERVICE提取了WRONG错误的一个,它忽略了我的@named批注,并调用了ProvidePublishSubject
以下版本,但给我的服务提供了错误的版本。
@Provides
@Named(NAME)
@Singleton
PublishSubject<MYOBJECT> provideSubjectRx(PublishSubject<MYOBJECT> LPS)
{
return LPS;
}
@Provides
PublishSubject<MYOBJECT> providePublishSubject() {
PublishSubject<MYOBJECT> publishSubject = PublishSubject.create();
return publishSubject;
}
我这样构建包装器。
该服务仅注入
@Inject
@Named(NAME)
lateinit var behaviorSubject: PublishSubject<MYOBJECT>
我的包装纸被这样注入
@Inject
ApiProvider apiProvider;
并在相同的dagger模块中这样创建。
@Provides
@Singleton
ApiProvider provideApiProvider(
Context context,
@Named(NAME) final PublishSubject<MYOBJECT> subject) {
return new ApiProvider(context, subject);
}
我唯一能想到的就是我需要使用Dagger构建服务,但这对我的体系结构并不是很好,并且我不拥有该服务。我真的只想注入它。因此,除了创建更多包装对象之外,还有什么事?这似乎很清楚,DI简直太疯狂了。
似乎它认为不能使用正确的构造函数..如果我拿走@name,它仍然无法构建。也许与方法签名中的PublishSubject有关。.据我所知,这应该是如何工作的。好的,我提供如何制作主题,但没有说明为什么它忽略了我的@named