2016-11-22 4 views
2

Я изучения Dagger 2 для DI и я просто сделал этот код, чтобы впрыснуть Дооснащение:Dagger + Котлин не инъекционного

NetModule.kt

@Module 
class AppModule(val mApplication: Application) { 

    @Provides 
    @Singleton 
    fun provideApplication() : Application{ 
     return mApplication 
    } 
} 

AppModule.kt

@Module 
class AppModule(val mApplication: Application) { 

    @Provides 
    @Singleton 
    fun provideApplication() : Application{ 
     return mApplication 
    } 
} 

NetComponent .kt:

@Singleton 
@Component(modules = arrayOf(AppModule::class, NetModule::class)) 
interface NetComponent { 
    fun inject(activity: Activity) 
} 

CustomApplication.kt

class CustomApplication : Application() { 

    companion object { 
     lateinit var mNetComponent: NetComponent 
    } 

    override fun onCreate() { 
     super.onCreate() 

     AndroidThreeTen.init(this) 

     mNetComponent = DaggerNetComponent.builder() 
          .appModule(AppModule(this)) 
          .netModule(NetModule(getString(R.string.api_base_url))) 
          .build() 

    } 
} 

Тогда в моей деятельности:

class TrashCansInfoActivity : AppCompatActivity(){ 

@Inject 
    lateinit var mRetrofit: Retrofit 

override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_trash_cans_info) 

     CustomApplication.mNetComponent.inject(this) 

     setSupportActionBar(toolbar) 

     populateTrashCanList() 

    } 

    private fun populateTrashCanList(){ 
     showProgress(true) 
     mRetrofit.create(ApiClient::class.java) 
       .getTrashCans() 
       .map { it.map { it.toTrashCan() } } 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .doOnError { 
        showProgress(false) 
        Toast.makeText(this, "Erro ao carregar lista de lixeiras", Toast.LENGTH_SHORT).show() 
       }.doOnCompleted { showProgress(false) } 
       .subscribe(behaviorSubject) 
    } 

} 

Таким образом, этот код должен работать, не так ли? Зависимость следует добавить ... Но когда я бегу мое приложение ... Я получаю это:

kotlin.UninitializedPropertyAccessException: lateinit property mRetrofit has not been initialized 

Так дооснащения не впрыскивают. Что мне не хватает?

Любая помощь приветствуется!

ответ

11
fun inject(activity: Activity) 

должен быть

fun inject(activity: TrashCansInfoActivity) 
+0

Он работал. Благодаря! –

Смежные вопросы