我有:
@Inject
AdalService adalService;
@Inject
Realm realm;
这两个来自两个不同的组件。
AdalComponent
@UserScope
@Component(dependencies = {NetComponent.class}, modules = AdalServiceModule.class)
public interface AdalServiceComponent
{
void inject(MainActivity activity);
void inject(EventsJob eventsJob);
}
RealmComponent
@UserScope
@Subcomponent(modules = RealmModule.class)
public interface RealmComponent
{
void inject(EventsJob eventsJob);
}
但是我收到以下错误:
Error:(16, 10) error: io.realm.Realm cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
io.realm.Realm is injected at
com.bjss.bjssevents.jobs.EventsJob.realm
com.bjss.bjssevents.jobs.EventsJob is injected at
com.bjss.bjssevents.dagger.components.AdalServiceComponent.inject(eventsJob)
RealmModule
@Module
public class RealmModule
{
private static final String TAG = RealmModule.class.getSimpleName();
public RealmModule(@Singleton final Context context)
{
Log.d(TAG, "Configuring Realm");
Realm.init(context);
Realm.setDefaultConfiguration(new RealmConfiguration.Builder().deleteRealmIfMigrationNeeded().build());
}
@UserScope
@Provides
public Realm providesRealm()
{
Log.d(TAG, "Providing Realm");
return Realm.getDefaultInstance();
}
}
答案 0 :(得分:2)
在AdalServiceComponent
和RealmComponent
内,你有相同的方法:
void inject(EventsJob eventsJob);
这是不可接受的。对于指定对象(inject
方法的参数),必须只有一个inject
方法。
此外,您无法从同一级别的两个模块中注入东西。 Component
&#39}都使用相同的范围进行注释:@UserScope
。他们对彼此一无所知。如果您要在AdalServiceComponent
和RealmComponent
中定义资源,请将其中一个设为父Component
,另一个设为Subcomponent
。 inject
方法应该在子组件中。
请阅读this excellent article series有关高级Dagger-2行为的信息,以便更好地了解此库。