kodein,将数据注入到简单 class
kodein, inject data to simple class
我是 kotlin 和 kodein 开发的新手。
我想将数据注入到一个简单的 class 中,它什么也不扩展。
我的 MainActivity
延伸 KodeinAppCompatActivity()
,
我扩展 KodeinSupportFragment()
的片段从我的简单 class CallType
调用了一个函数。但是这个函数必须从另一个简单的 class 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)
}
主要活动:
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 :
class CallType {
fun call(number: String) {
// !! I want to change gsmState value from ConnectivityState class
connectivityState.gsmState = true
}
我的连接状态class:
class ConnectivityState {
var gsmState = false
}
这是许多其他人中的一个例子,因为在很多情况下,我都是这样被屏蔽的。我尝试了很多东西,但我总是有这样的错误:value not injected
非常感谢您的回复..
当您调用 super.onCreate()
时,它会调用 onCreateView
,因此行 callType.call(callType.callNumber)
在 initializeInjector()
之前被调用 。
请注意,您应该始终在 调用 super.onCreate()
:
之前调用 initializeInjector()
override fun onCreate(savedInstanceState: Bundle?) {
initializeInjector()
super.onCreate(savedInstanceState)
}
我是 kotlin 和 kodein 开发的新手。 我想将数据注入到一个简单的 class 中,它什么也不扩展。
我的 MainActivity
延伸 KodeinAppCompatActivity()
,
我扩展 KodeinSupportFragment()
的片段从我的简单 class CallType
调用了一个函数。但是这个函数必须从另一个简单的 class 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)
}
主要活动:
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 :
class CallType {
fun call(number: String) {
// !! I want to change gsmState value from ConnectivityState class
connectivityState.gsmState = true
}
我的连接状态class:
class ConnectivityState {
var gsmState = false
}
这是许多其他人中的一个例子,因为在很多情况下,我都是这样被屏蔽的。我尝试了很多东西,但我总是有这样的错误:value not injected
非常感谢您的回复..
当您调用 super.onCreate()
时,它会调用 onCreateView
,因此行 callType.call(callType.callNumber)
在 initializeInjector()
之前被调用 。
请注意,您应该始终在 调用 super.onCreate()
:
initializeInjector()
override fun onCreate(savedInstanceState: Bundle?) {
initializeInjector()
super.onCreate(savedInstanceState)
}