kodein,将数据注入简单类

时间:2017-10-16 13:39:00

标签: android dependency-injection kotlin kodein

我是关于kotlin和kodein开发的新人。 我想将数据注入一个不扩展的简单类。

我的MainActivity扩展了KodeinAppCompatActivity(), 扩展KodeinSupportFragment()的我的片段从我的简单类CallType调用一个函数。但是此函数必须从其他简单类ConnectivitySate更改布尔值。我不想使用静态值。

下面,我的代码:

    class App : Application(), KodeinAware {

override val kodein by Kodein.lazy {
    import(autoAndroidModule(this@App))

    bind<CallType>() with instance(CallType())
    bind<ConnectivityState>() with instance(ConnectivityState())
    bind<ContactData>() with instance(ContactData())

}

override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(androidActivityScope.lifecycleManager)
}        

MainActivity:

    class MainActivity : KodeinAppCompatActivity() {        

我的片段:

class JournalFragment : KodeinSupportFragment(){

  private val callType: CallType by instance()

  @SuppressLint("MissingSuperCall")
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    initializeInjector()
}

  override fun onCreateView(inflater: LayoutInflater?, container: 
          ViewGroup?,savedInstanceState: Bundle?): View? {

      // !! CALL MY FUNCTION !!
      callType.call(callType.callNumber)

  }

 ....

 @SuppressLint("MissingSuperCall")
 override fun onDestroy() {
    super.onDestroy()
    destroyInjector()
}

我的简单课程:

class CallType {

fun call(number: String) {

   // !! I want to change gsmState value from ConnectivityState class
   connectivityState.gsmState = true

}

My ConnectivityState类:

class ConnectivityState {

    var gsmState = false

}

这是许多其他人的一个例子,因为在很多情况下,我都是这样阻止的。我尝试了很多东西,但总是有错误:value not injected

非常感谢您的回复..

1 个答案:

答案 0 :(得分:0)

当您致电super.onCreate()时,会拨打onCreateView,因此行callType.call(callType.callNumber)initializeInjector()之前被称为

请注意,您应该在致电initializeInjector()之前致电super.onCreate()

override fun onCreate(savedInstanceState: Bundle?) {
    initializeInjector()
    super.onCreate(savedInstanceState)
}