如何在 Koin 中提供基数 class?
How to provide the base class in Koin?
例如我下面的 classes:
abstract class BaseClass()
class SpecificClass : BaseClass()
现在,我想通过 koin
依赖注入提供 SpecificClass
,但我也想在同一张图中提供基础 class BaseClass
。
明确地说,我想做类似的事情:
class Someclass {
...
private specificClass: SpecificClass by inject()
...
}
class Someclass {
...
private baseClass: BaseClass by inject()
// where this BaseClass is just the the same instace of the SpecificClass in the dependency graph
...
}
我如何让我的模块做到这一点?如何将实现实例注入 baseClass 引用?
你不能注入抽象 classes.
为了注入 class,它必须是可实例化的和抽象的 classes 不是。
要使用 Koin 注入 SpecificClass
,您需要创建一个模块:
val appModule = module {
single {
SpecificClass()
}
}
在你的应用程序中初始化它class:
class MyApplication : Application() {
override fun onCreate(){
super.onCreate()
// start Koin!
startKoin {
// declare used Android context
androidContext(this@MyApplication)
// declare modules
modules(appModule)
}
}
}
并在 activity/fragment
中使用注入委托
class MyActivity() : AppCompatActivity() {
val specificClass : SpecificClass by inject()
}
您可以通过两种方式使用 Koin
方法一
你可以像这样为它们创建依赖关系
single {
SpecificClass()
}
single<BaseClass> {
get<SpecificClass>()
}
这样,每当你注入一个实例时,它就会被相应地注入
方法二
您可以像这样使用命名依赖项
single("BaseClassImpl") {
SpecificClass()
}
当你想注入它时,像这样为该依赖项提供密钥:
class Someclass {
...
private specificClass: SpecificClass by inject("BaseClassImpl")
...
}
class Someclass {
...
private baseClass: BaseClass by inject("BaseClassImpl")
// where this BaseClass is just the the same instace of the SpecificClass in the dependency graph
...
}
例如我下面的 classes:
abstract class BaseClass()
class SpecificClass : BaseClass()
现在,我想通过 koin
依赖注入提供 SpecificClass
,但我也想在同一张图中提供基础 class BaseClass
。
明确地说,我想做类似的事情:
class Someclass {
...
private specificClass: SpecificClass by inject()
...
}
class Someclass {
...
private baseClass: BaseClass by inject()
// where this BaseClass is just the the same instace of the SpecificClass in the dependency graph
...
}
我如何让我的模块做到这一点?如何将实现实例注入 baseClass 引用?
你不能注入抽象 classes.
为了注入 class,它必须是可实例化的和抽象的 classes 不是。
要使用 Koin 注入 SpecificClass
,您需要创建一个模块:
val appModule = module {
single {
SpecificClass()
}
}
在你的应用程序中初始化它class:
class MyApplication : Application() {
override fun onCreate(){
super.onCreate()
// start Koin!
startKoin {
// declare used Android context
androidContext(this@MyApplication)
// declare modules
modules(appModule)
}
}
}
并在 activity/fragment
中使用注入委托class MyActivity() : AppCompatActivity() {
val specificClass : SpecificClass by inject()
}
您可以通过两种方式使用 Koin
方法一
你可以像这样为它们创建依赖关系
single {
SpecificClass()
}
single<BaseClass> {
get<SpecificClass>()
}
这样,每当你注入一个实例时,它就会被相应地注入
方法二
您可以像这样使用命名依赖项
single("BaseClassImpl") {
SpecificClass()
}
当你想注入它时,像这样为该依赖项提供密钥:
class Someclass {
...
private specificClass: SpecificClass by inject("BaseClassImpl")
...
}
class Someclass {
...
private baseClass: BaseClass by inject("BaseClassImpl")
// where this BaseClass is just the the same instace of the SpecificClass in the dependency graph
...
}