2016-03-03 9 views
8

を有している場合、私は、このコンポーネントを有する:Dagger2:エラー2つの成分は、同じ噴射メソッドシグネチャ

@Singleton 
@Component(modules = OauthModule.class) 
public interface OauthComponent { 

    void inject(LoginActivity a); 

} 

とモジュール:

@Module 
public class OauthModule { 

    @Provides 
    @Singleton 
    Oauth2Service provideOauth2Service() { 
     return new Oauth2StaticService(); 
    } 

} 

この別の成分:

@Singleton 
@Component(modules = LoggedUserModule.class) 
public interface LoggedUserComponent { 

    void inject(LoginActivity a); 

} 

とこのエラーが発生します:

Error:(15, 10) error: Oauth2Service cannot be provided without an @Provides- or @Produces-annotated method.

私は別のActivityするLoggedUserComponentの注入メソッドのパラメータを変更すると、このようなAnotherActivityを言う:

@Singleton 
@Component(modules = LoggedUserModule.class) 
public interface LoggedUserComponent { 

    void inject(AnotherActivity a); 

} 

コンパイルはokです。どうして?同じインジェクション署名を持つ2つのコンポーネントを持つことはできませんか?

Daggerがどのように機能するかを理解しようとしていますので、何か助けになるでしょう。ありがとう。

答えて

7

だと思うしてみてください。 には、2つの異なるコンポーネントが同じオブジェクトを注入することができます(テスト目的以外の場合、または追加の動作ではなく異なる動作を含める必要があります)。

あなたLoginActivityは、複数のモジュールに依存している場合、それは、単一のコンポーネントからすべて依存関係を提供できない場合は、あなたのエラーが示すように、短剣は失敗しますので、あなたは、単一のコンポーネントでそれらを集約する必要があります。 Oauth2Serviceを見ると

@Singleton 
@Component(modules = {LoggedUserModule.class, OauthModule.class}) 
public interface LoggedUserComponent { 

    void inject(AnotherActivity a); 

} 

、これは簡単そう高い範囲が適切かもしれない、複数のオブジェクトが使用できる何かである可能性があります。その場合は、アプリケーションコンポーネントに@Singletonスコープで追加することを検討してください。 a @UserScope

その後、あなたは@Component(dependencies = OauthComponent.class)を使用し、そのためのOauthComponentでゲッターを提供するあなたのLoggedUserComponent@Subcomponentや、このコンポーネントを宣言依存関係を作るためにどちらかだろう。どちらの場合も、daggerはグラフの上位にある依存関係を提供することができ、エラーも解決されます。

0

あなたはあなたがそのクラスに注入できると言っているが、それはあなたが提供することを期待しているクラスを提供していないので、怒っている。 OauthModuleをLoggedUserComponentに追加するだけです。それは実際にあるオブジェクトグラフ—としてdaggerのこの

@Singleton 
@Component(modules = {LoggedUserModule.class, OauthModule.class}) 
public interface LoggedUserComponent { 

    void inject(LoginActivity loginActivity); 

} 
+0

OAuthModuleがシングルトンの場合はどうなりますか?私は注射することはできませんか? – sector11

+0

私はあなたが求めていることに従うかどうか分からない – ootinii

関連する問題