我刚刚学习了kodein lib用于依赖注入。我如何获取变量的依赖值?下面是我的应用程序类,我将上下文与 kodein 绑定:
class BaseApp : Application(), KodeinAware {
override val kodein by Kodein.lazy {
import(contextModule)
}
private val contextModule = Kodein.Module(CONTEXT_MODULE_TAG){
bind<Context>(CONTEXT_TAG) with provider { this@BaseApp }
}
companion object{
private const val CONTEXT_MODULE_TAG = "context_module"
const val CONTEXT_TAG = "context_tag"
}
}
Run Code Online (Sandbox Code Playgroud)
在我的存储库类中,我尝试获取上下文,但没有成功。
class BatteryRepository : KodeinAware {
override val kodein by kodein()
private val context by instance<Context>(BaseApp.CONTEXT_TAG)
...
Run Code Online (Sandbox Code Playgroud)
其中kodein()方法调用错误:
表达式“kodein”不能作为函数调用。找不到函数“invoke()”
我如何获取上下文?像这样转移上下文是个好主意吗?
我使用JPA这样的数据库查询:
@Query("SELECT " +
"new Report(" +
"sum (r.fraction1)," +
"sum (r.fraction2)) from Report r")
Report calculateTotalReports();
Run Code Online (Sandbox Code Playgroud)
当数据库已满时,它可以正常工作,但是当数据库为空时,应用程序就会崩溃。我如何检查表何时包含行然后选择总和?我尝试使用CASE WHEN ... THEN,但JPA没有提供它。
崩溃日志:
QueryException:无法从元组实例化类 [com.statistic.server.entity.Report],其根本原因
java.lang.IllegalArgumentException:在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)〜[na:1.8.0_201]处为null,在sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源)〜[na:1.8.0_201]处。 Reflect.DelegatingConstructorAccessorImpl.newInstance(来源未知)~