2017-11-25 25 views
0

Dagger 2を使用して簡単なMVP Archtectureアプリケーションを作成しようとしています。このチュートリアルと同じ結果を達成したいと思いますが、Kotlinと同じです。ここまでは私のコードです。Dagger 2 + KotlinはPresenterをViewに挿入できません

プレゼンター:

class MainPresenter @Inject constructor(var view: IMainView): IMainPresenter{ 

override fun beginMessuring() { 
    view.toastMessage("Measuring started") 
} 

override fun stopMessuring() { 
    view.toastMessage("Measuring stopped") 
} 

} 

ビュー:

class MainActivity : AppCompatActivity(), IMainView { 

@Inject lateinit var presenter : MainPresenter 

val component: IMainComponent by lazy { 
    DaggerIMainComponent 
      .builder() 
      .mainPresenterModule(MainPresenterModule(this)) 
      .build() 
} 

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_main) 
    component.inject(this) 
    presenter.beginMessuring() 
} 

override fun toastMessage(message: String) { 
    Toast.makeText(this, message, Toast.LENGTH_LONG).show() 
} 
} 

ダガーモジュール:

ダガーコンポーネント:

@Component(modules = arrayOf(MainPresenterModule::class)) 
interface IMainComponent { 
    fun inject(mainView : IMainActivity) 
} 

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.maciej.spiritlvl/com.example.maciej.spiritlvl.View.MainActivity}: kotlin.UninitializedPropertyAccessException: lateinit property presenter has not been initialized 

PS、私のGradle短剣の設定:

kapt 'com.google.dagger:dagger-compiler:2.9' 
mplementation 'com.google.dagger:dagger:2.9' 

EDIT:IMainViewからMAINVIEWへ 変更注入さプレゼンタータイプ

問題は、私はこれで始まるエラーを構築取得していますということです。

答えて

1

ケースを挿入しようとすると、IMainPresenterのように、使用する具体的な実装をdaggerに伝える必要があります。 Daggerには、そのインターフェースのどの実装が「持っている」かを知る手段がありません(あなたはそのインターフェースを多数実装しているかもしれません)。

IMainViewには、@Providesという名前のメソッドをモジュールに追加することで正しいことを行いました。あなたはプレゼンターのために同じことをすることができますが、モジュールを作成するときにプレゼンターを自分で作成しなければならないため、短剣の全体を無駄にするでしょう。

IMainPresenterインターフェイスをアクティビティに挿入する代わりに、具体的な実装MainPresenterを注入します。次に、あなたのモジュール(発表者用)に@Providesメソッドは必要ありません。

+0

あなたの言いたことをやった。ビューでは、変更されたフィールドタイプをMainPresenterに置き換えましたが、まだkotlin.UninitailizedPropertyExceptionが表示されます。 – Maciek

関連する問題