2016-09-22 14 views
0
でそれのコンストラクタに引数を持つオブジェクトを注入する方法

更新Dagger2

今、私はこのように私のコードを変更し、それが動作しますが、私は知らない、これは適切な方法です。

クラスhttp://pastebin.com/srhu4eB7

これは私のプロジェクトでdagger2使用する方法を学んでいるの注射http://pastebin.com/wLbxBQqb

ですが、私はこの依存関係を注入する方法がわかりません。 私は、私がクラスを注入したいというアクティビティから来る3つの引数を渡さなければならないコンストラクタを使ってテストカルルスを持っています。 http://pastebin.com/XqRNFbvj はここに私のテストクラスのための私のモジュールです:: はここに私のテストクラスhttp://pastebin.com/r4wmqfLB、これは私のコンポーネントです:私は、注射を使用したいのですがどのようにhttp://pastebin.com/r1QYdNJx
、ここ、それhttp://pastebin.com/cs0V5wfq

私は何とかこのようなオブジェクトを注入することができますか、どのように注入オブジェクトにargsを渡すことができますか?

答えて

1

このクラスに他の依存関係がない場合は、実際には依存関係のアクティビティではなく、newを使用できます。しかし、このようなモジュールと、あなたがあなたの活動(または、この種の活動)のためのサブコンポーネントを持つようにしたいと思い、あなたの質問に答えるために:

@Module 
public class TestModule { 
    private final String arg1; 
    private final int arg2; 
    private final boolean arg3; 

    public TestModule(String arg1, int arg2, boolean arg3) { 
    this.arg1 = arg1; 
    this.arg2 = arg2; 
    this.arg3 = arg3; 
    } 

    @Provides DaggerTestClass provideDaggerTestClass() { 
    return new DaggerTestClass(arg1, arg2, arg3); 
    } 
} 

、あなたは次のようにそれを使用したい:

IndexApplication.getApplication().getAppComponent() 
    .daggerTestSubcomponent(new DaggerTestModule("arg1", 2, true)) 
    .inject(this); 

しかし、このクラスでは他の依存関係を持っているあなたは、あなたはおそらく、実際に(多分あなたはAutoFactoryを使用するために生成される)の工場を利用したいと思います場合は、作成されたオブジェクトを「手動注入」:

private DaggerTestClass daggerTestClass; // note: no @Inject here 

// … 

// Inject other dependencies into the activity 
IndexApplication.getApplication().getAppComponent().inject(this); 
// "manually inject" the DaggerTestClass 
this.daggerTestClass = IndexApplication.getApplication().getAppComponent() 
    .daggerTestFactory().create("arg1", 2, true); 
+0

ありがとうございましたが、私は広告が必要です私はちょうど私が私の既存のクラスを注入できない理由を説明する例を掲示しました。私はそれが私が望むものだと思う。 – user3057944

+0

提案したソリューションを実装しようとしましたが、メソッドがありません.daggerTestFactory() – user3057944

+0

本当に追加する必要があります。 (またはあなたのアクティビティに注入しますが、別のフィールドを初期化するために一度しか使用しません...) –

関連する問題