私は2回の注射でアクティビティを持っています。各注入されたコンポーネントだけでは動作しますが、注入の両方の次のエラーにつながる:ダガー2個のAndroid用マルチインジェクション
Error:(12, 10) error: android.app.Fragment cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
fr.daggertest.MainActivity.fragmentB
[injected field of type: android.app.Fragment fragmentB]
Error:(12, 10) error: android.app.Application cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
fr.daggertest.MainActivity.applicationA
[injected field of type: android.app.Application applicationA]
をしかし、彼らの両方がすでに注釈付き@Providesているので、私は間違っているものを見ないのですか?
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Inject
Fragment fragmentB;
@Inject
Application applicationA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// create component & inject...
}
モジュール&コンポーネント:
@Component(modules={ModuleA.class})
@Singleton
public interface ComponentA {
void inject(MainActivity activity);
}
@Component(modules={ModuleB.class})
@Singleton
public interface ComponentB {
void inject(MainActivity activity);
}
@Module
public class ModuleA {
Application mApplication;
public ModuleA(Application application) {
mApplication = application;
}
@Provides
public Application provideApplication() {
return mApplication;
}
}
@Module
public class ModuleB {
Fragment mFragment;
public ModuleB(Fragment fragment) {
mFragment = fragment;
}
@Provides
public Fragment provideFragment() {
return mFragment;
}
}
あなたは 'Activity'を提供するメソッドを提供しておらず、' Fragment'と 'Application'だけを提供しています。また、あなたは "コンポーネントを作成して注入する"コードを投稿することができますか? – Pelocho
申し訳ありませんがタイプミスで、コードを編集しました。 "create component&inject"コードはコメントアウトされていますが、これはコンパイルエラーの原因ではありません。 –
実際、可能です。私の答えを確認してください – Pelocho