我将 moduleA 设置为应用程序范围的单例提供程序,将 ModuleB 设置为与用户相关的对象提供程序
我的用户显示片段将使用系统范围的总线向其他人发送消息并使用用户相关对象进行显示。
问题不能将不同的 scrope 类注入一个对象。使用 component.getX 方法工作正常,但注入是首选方式。错误消息: @UserScope 可能不会引用具有不同范围的绑定:@Provides @Singleton Bus ModuleA.provideBus()
@Module
public class ModuleA {
@Provides @Singleton Bus provideBus() {...}
}
模块 B 作为用户相关的信息提供者
@Module
public class ModuleB{
private final User user;
public ModuleB(User user) {...}
@Provides @UserScope User provideUser() {}
@Provides @UserScope UserManager provideUserManager() {}
}
组件设置如下:
@Component (modules={ModuleA.class})
@Singleton
public interface ComponentA {
Bus getBus();
void inject(ClassA target);
}
@Component(modules={ModuleB.class})
@UserScope
public interface ComponentB {
User getUser();
UserManager getUserManager();
void inject(ClassA target);
}
class UserFragment exrtends Fragment {
@Inject Bus bus;
@Inject UserManager userManager;
public void onCreate() {
getComponentA().inject(this);
getComponentB().inject(this);
}
}