アプリケーション全体のシングルトン プロバイダーとして moduleA をセットアップし、ユーザー関連オブジェクト プロバイダーとして ModuleB をセットアップしました。
私のユーザー表示フラグメントは、システム全体のバスを使用してメッセージを他のユーザーに送信し、ユーザー関連オブジェクトを使用して表示します。
問題は、異なるスコープ クラスを 1 つのオブジェクトに挿入できません。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);
}
}