Tag: kodein

kodein,将数据注入简单的类

我是kotlin和kodein开发新的。 我想将数据注入一个简单的类,它不扩展。 我有我的MainActivity扩展KodeinAppCompatActivity() ,我的片段,它扩展KodeinSupportFragment()从我的简单类CallType调用一个函数。 但是这个函数必须改变其他简单类ConnectivitySate的布尔值。 我不想使用静态值。 下面,我的代码: class App : Application(), KodeinAware { override val kodein by Kodein.lazy { import(autoAndroidModule(this@App)) bind() with instance(CallType()) bind() with instance(ConnectivityState()) bind() with instance(ContactData()) } override fun onCreate() { super.onCreate() registerActivityLifecycleCallbacks(androidActivityScope.lifecycleManager) } 主要活动 : class MainActivity : KodeinAppCompatActivity() { 我的片段: class JournalFragment : KodeinSupportFragment(){ private val callType: CallType by instance() […]

如何注入瞬间依赖工厂与Kodein?

我想使用ViewModelProvider工厂从意图(即:俱乐部)注入自定义parcelable数据。 val teamModule = Kodein.Module { bind<ViewModelProvider.Factory>("team-factory") with factory { club: Club -> TeamListViewModelFactory(club, instance()) } bind<GetTeams>() with provider { GetTeams(instance()) } bind<TeamRepository>() with provider { TeamDataRepository(instance()) } bind<TeamListViewModel>() with factory { context: FragmentActivity -> ViewModelProviders.of(context, instance("team-factory")).get(TeamListViewModel::class.java) } } 在我的活动中,我想从内置的意图数据获取一个viewModel。在这里我的活动: class TeamActivity : AppCompatActivity(), KodeinInjected { override val injector = KodeinInjector() private val viewModel: TeamListViewModel […]

如何使用Kodein依赖检索容器进行多重绑定?

我从Dagger 2迁移到Kodein,并希望替代多重绑定功能。 有一个吗?

如何将测试覆盖注入到默认的依赖关系图?

我想使用Kodein将嘲笑覆盖注入到我的Android仪器测试中。 我不知道哪个是最好的方法来做到这一点。 以下是我的想法: 我的应用程序使用KodeinAware应用程序类。 服务的Kodein实例拥有我的应用程序所需的所有依赖关系。 在我的测试中,我想注入特定的依赖关系的模拟覆盖,以测试在各种情况下的应用程序的行为。 对于每个测试,覆盖应该是不同的,并且应该在测试运行之前/之前注入。 在这种情况下,可配置的Kodein扩展是否合理,还是有一个更简单,更合适的方法(如果是的话)?

kodein – 注入的数据值不是数据的值检索

在我的CallType类中,我把注入的数据connectivityState.callBackState为true,在ConnectivitySte类中初始化为false。 但是在我的IncomingCallBroadcastReceiver类中,我的布尔数据callBackState不是true而是false 。 class CallType { val kodein = Kodein { bind<ConnectivityState>() with provider { ConnectivityState() } } private val connectivityState: ConnectivityState = kodein.instance() fun call(number: String) { //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\ connectivityState.callBackState = true } class IncomingCallBroadcastReceiver : KodeinBroadcastReceiver() { private val connectivityState: ConnectivityState by instance() override fun onBroadcastReceived(context: Context, intent: Intent) { //!!!!!!!!!!!!!! IT'S FALSE HERE […]

Kodein工厂绑定抛出NotFoundException

我不知道这是一个错误还是我只是做错了。 在文档中我没有看到kodein工厂绑定应该以任何其他方式被调用: class KodeinConfidenceTest { @Test fun testThatKodeinWorks() { val kodein = Kodein { bind<Dice>() with factory { sides: Int -> RandomDice(sides) } } val d:Dice = kodein.instance(5) } } open class Dice data class RandomDice(val sides:Int) : Dice() …但是这会导致NotFoundException com.github.salomonbrys.kodein.Kodein$NotFoundException: No provider found for bind<Dice>("5") with ? { ? } Registered in Kodein: bind<Dice>() […]

随着Kodein依赖注入,我不想传遍各处的kodein实例

使用Kodein,我发现我必须传递kodein实例,或者将它们注入到模块和类中。 但是有时候我有一些课程是非常孤立的,我希望他们能够发现“一个真正的Kodein”。 由于这是一个服务器端应用程序,我只有一个Kodein范围应该很容易。 我可以创建一个全局对象,比如: val kodeinGlobal: Kodein = Kodein { … } 但是,当一些模块在不同的项目中被重复使用时,这是行不通的,我们不能轻易地分享这个例子。 也许一个单独的模块只是举行全球工作,但那么它将需要一个var ,我宁愿它不能改变。 Kodein可以自己发现一个主要的,顶级的或全球性的范围吗? 注意: 这个问题是由作者故意编写和回答的( 自我回答问题 ),所以对于常见的Kotlin / Kodein主题的习惯性的回答是存在于SO中的。

在Kodein依赖注入中,如何将Kodein本身的实例注入实例?

在Kodein中,我将模块导入到父模块中,有时这些类需要Kodein的一个实例,以便稍后进行注入。 问题是这个代码: val parentModule = Kodein { import(SomeService.module) } SomeService.module稍后需要Kodein实例,但Kodein尚未创建。 稍后将它传递给模块似乎是一个坏主意。 在Kodein 3.x我看到有一个全局实例的kodein-conf模块,但我想避免全局。 其他模块或类如何获得Kodein实例? 注意: 这个问题是由作者故意编写和回答的( 自我回答问题 ),所以对于常见的Kotlin / Kodein主题的习惯性的回答是存在于SO中的。

在Kodein中传递lambda作为参数

我正在使用Kodein在Android上进行依赖注入(当然是在Kotlin中),但是我正在努力的一个方面:我似乎无法将lambda作为参数传递给工厂。 它编译正确,但在运行时失败(我是通过Kodein来防范)。 在我的应用程序类,我做了以下绑定: class MyApplication : Application(), KodeinAware { override val kodein by Kodein.lazy { … bind<SimpleButtonListener>() with factory { func: () -> Unit -> SimpleButtonListener(func) } } } 在我的活动中,我这样调用它: val onClick = { startActivity(EmailIntent()) } val clickListener : SimpleButtonListener by with(onClick).instance() 我也试过这个失败的: val clickListener : SimpleButtonListener by with({ startActivity(EmailIntent()) }).instance() 但是我运行时总是遇到同样的问题: com.github.salomonbrys.kodein.Kodein$NotFoundException: No factory […]