2017-05-21 12 views
0

以下のエラーでコンパイルできないのはなぜですか?それを修正するために完了?Dagger 2.10:サブコンポーネント+カスタムスコープ= "@Injectコンストラクタなしで、または@ Prov-または@ Produces-Annotatedメソッドから提供できない"

Error:(9, 8) error: [SubComponent.inject(MainActivity)] java.lang.Integer cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method. 
java.lang.Integer is injected at 
MainActivity.abc 
MainActivity is injected at 
SubComponent.inject(activity) 

TL; DR:私は親コンポーネントとは異なるスコープを持つサブコンポーネントを作成し、活動にサブコンポーネントの依存関係を注入しようとしています。


App.java

public class App extends Application { 
    private AppComponent appComponent; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     appComponent = DaggerAppComponent.create(); 
     appComponent.inject(this); 
     if (BuildConfig.DEBUG) { 
      Timber.plant(new Timber.DebugTree()); 
     } 
    } 

    public AppComponent getAppComponent() { 
     return appComponent; 
    } 

    public static App app(Context context) { 
     return (App) context.getApplicationContext(); 
    } 
} 

AppComponent.java

@Singleton 
@Component 
public interface AppComponent { 
    void inject(App app); 

    SubComponent.Builder subComponent(); 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 
    @Inject 
    int abc; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     App.app(this).getAppComponent() 
       .subComponent() 
       .userModule(new SubModule()) 
       .build() 
       .inject(this); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity); 
    } 
} 

SubComponent.java

@SubScope 
@Subcomponent(modules = {SubModule.class}) 
public interface SubComponent { 
    void inject(MainActivity activity); 

    @Subcomponent.Builder 
    interface Builder { 
     Builder userModule(SubModule module); 

     SubComponent build(); 
    } 
} 

SubModule.java

@Module 
public class SubModule { 
    @Provides 
    @SubScope 
    public int provideAbc() { 
     return 1; 
    } 
} 

SubScope.java

@Qualifier 
@Retention(RetentionPolicy.RUNTIME) 
public @interface SubScope { 
} 

答えて

1

それを動作させるために、私はちょうどを変更しなければなりませんでした@ScopeからSubScopeに:

@Scope 
@Retention(RetentionPolicy.RUNTIME) 
public @interface SubScope { 
} 
+0

はその人に正解フラグを付けます –

関連する問題