gpt4 book ai didi

android - 在 Android 上使用 SubCut (Scala DI)

转载 作者:搜寻专家 更新时间:2023-11-01 08:13:39 26 4
gpt4 key购买 nike

我正在使用 Scala 为 Android 编写游戏。现在我正在尝试让 Dick Wall 的新依赖注入(inject)框架 SubCut 在 Android 上运行。

基本上我有一个扩展 android.app.Activity 的类,这是游戏的唯一 Activity ,在应用程序启动时由 Android 自动启动。现在我需要让 SubCut 注入(inject)这个 Activity 实例。

通常你会这样做:

implicit val bindingModule = ProjectConfiguration
val topInstance = new DoStuffOnTheWeb("stuff", new Date())

val topInstance = new DoStuffOnTheWeb("stuff", new Date())(ProjectConfiguration)

但问题是Activity是由android实例化的,而不是来 self 的代码。我试过使用这样的东西:

class MyGame()(val bindingModule:BindingModule = MyGameConfigurationModule) extends Activity with Injectable {

但显然 android 不知道如何实例化它,因为我现在得到:

ERROR/AndroidRuntime(322): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mycompany.android.mygame.....

我在想是否可以在 Activity 的 onCreate() 方法中以某种方式“引导”SubCut,就像 RoboGuice 使用 Guice DI 框架所做的那样(它在该方法中创建一个注入(inject)器实例并将其传递给 this 作为参数。

我考虑的其他选项是,我是否可以跳过 Activity 的自动启动,并使用 Subcut 所需的隐式 val 从 android.app.Application 手动启动它。但不知何故,这感觉像是在自找麻烦(是的,我对 Android 开发还很陌生)。

有什么想法吗?

最佳答案

好吧,在我的脑海中,也许这里最好的选择是使用基于 mixin 的解决方案来提供绑定(bind)模块。你可以很容易地做到这一点:

trait ProjectBindings {
implicit val bindingModule: BindingModule = MyGameConfigurationModule
}

然后将其与可注入(inject)特征混合:

class MyGame extends Injectable with ProjectBindings {
// ...
}

这是我在像 wicket 这样的框架中使用的技术,在这种框架中,您无法轻松创建新实例,因此我相信它也应该适用于 Android Activity 用例。我很想知道它是否如此。当然,这种方法的问题是它在重新配置方面不是很灵活,这就是为什么我更喜欢柯里化(Currying)构造函数参数方法中的隐式 val,但它确实工作得很好。

希望对您有所帮助。

鸡巴

关于android - 在 Android 上使用 SubCut (Scala DI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com