0
最初のものと同じクラスに何かを注入する2つ目のDagger 2コンポーネントを作成しようとすると、コンパイルエラーが発生します。それは許されないのですか?私はそうではないと言う文書は見つけられていない。Android Dagger 2のコンパイルエラー
モジュール1:
@Module
public class NavModule {
Context context;
public NavModule(Context context){
this.context = context;
}
@Provides @Named("nav")
public List<NAV_ACTIONS> provideNavActions() {
// Do some stuff
}
}
コンポーネント1:
@Component(modules = {NavModule.class})
public interface NavComponent {
void inject(MainActivity activity);
void inject(AbstractHomeFragment fragment);
}
モジュール2:すべてはまだ罰金コンパイルこの時点で
@Module
public class OtherModule {
Context context;
public OtherModule(Context context){
this.context = context;
}
@Provides
public Object provideSomething(){
return null;
}
}
。私は、コンポーネント2を追加すると、それが壊れる:ここ
@Component(modules = {OtherModule.class})
public interface OtherComponent {
void inject(MainActivity activity);
void inject(AbstractHomeFragment fragment);
}
はエラーです:
Error:(14, 10) error: @javax.inject.Named("nav") java.util.List<NAV_ACTIONS> cannot be provided without an @Provides- or @Produces-annotated method.
@javax.inject.Named("nav") java.util.List<NAV_ACTIONS> is injected at
com.company.common.MainActivity.navActions
com.company.common.MainActivity is injected at
com.company.common.dependency.OtherComponent.inject(activity)
Error:(15, 10) error: @javax.inject.Named("home") java.util.List<com.company.common.NAV_ACTIONS> cannot be provided without an @Provides- or @Produces-annotated method.
@javax.inject.Named("home") java.util.List<com.company.common.NAV_ACTIONS> is injected at
com.company.common.views.AbstractHomeFragment.homeActions
com.company.common.views.AbstractHomeFragment is injected at
com.company.common.dependency.OtherComponent.inject(fragment)
E:\Development\Repositories\PropertyForce\PropertyForce_Android\app\src\main\java\com\company\common\MainActivity.java
Error:(50, 47) error: cannot find symbol class DaggerNavComponent
Error:(50, 47) error: cannot find symbol class DaggerNavComponent
E:\Development\Repositories\PropertyForce\PropertyForce_Android\app\src\main\java\com\company\common\views\AbstractHomeFragment.java
Error:(29, 47) error: cannot find symbol class DaggerNavComponent
Error:(29, 47) error: cannot find symbol class DaggerNavComponent
はこちらMainActivity
からダガー関連のものです。エディタにエラーは表示されません。
import com.company.common.dependency.DaggerNavComponent;
import com.company.common.dependency.NavComponent;
import com.company.common.dependency.NavModule;
// ...
@Inject @Named("nav") List<NAV_ACTIONS> navActions;
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
NavComponent navComponent = DaggerNavComponent.builder().navModule(new NavModule(this)).build();
navComponent.inject(this);
// ...
AbstractHomeFragment
は非常に似たようなことをしています。あなたは複数持つことができます -
@Component(modules = {OtherModule.class, NavModule.class})
public interface OtherComponent {
void inject(MainActivity activity);
void inject(AbstractHomeFragment fragment);
}
編集:
私は見る!だから、私が正しく理解していることを確認するために、あなたはアプリケーション内に 'Component'を1つだけ持っていると思いますか?そして、 "アプリケーション"によってあなたはアプリケーションを意味し、 'android.os.Application'サブクラスではありません、そうですか? – nasch
別の質問 - 'Component'オブジェクトを作成するときに、私は' Module'を渡します。したがって、2つの異なるモジュールから注入されるものを得るためには、 'Module'インスタンスごとに2つの' Component'インスタンスを作成する必要がありますか? – nasch
私はansを編集しました。クラスファイルでビルダーを呼び出す必要はありません。これは、アプリケーションファイルで行います。 @Injectを使うだけです。私のデモアプリケーションで、以下のことを確認できます:https://github.com/code-crusher/android-demos/tree/master/Dagger2 –