我对Guice不使用Guice模块中定义的显式绑定有一个奇怪的问题。这是接口到类的简单映射。
我已通过调试器对其进行了跟踪,并且可以在InjectorImpl.findBindingsByType()中看到绑定MultiMap确实包含有问题的绑定。但是,它返回null,然后抛出一个异常,即没有实现绑定(请参见下文)。绑定类型是一个接口,因此很明显,如果不使用绑定,就无法创建它。
1) No implementation for org.example.module.approval.ApprovalController was bound.
Did you mean?
org.example.module.approval.ApprovalController bound at org.example.module.ApBaseModule.configure(ApBaseModule.kt:88)
org.example.module.approval.ApprovalControllerImpl bound at org.example.module.approval.ApprovalControllerImpl.class(Unknown Source)
while locating org.example.module.approval.ApprovalController
for the 1st parameter of org.example.module.invoices.delegates.BeginApprovalDelegate.<init>(Unknown Source)
while locating org.example.module.invoices.delegates.BeginApprovalDelegate
我尝试使用调试器中的“执行表达式”工具在TypeLiteral及其应匹配的MultiMap条目上调用equals方法。这确实返回false。但是我不知道为什么。有趣的是,如果我在每个方法上调用toString并测试其相等性,则返回true。
我发现的JavaDocs没有指定Type Literal的相等条件,并且我努力遵循Guice源代码中的逻辑。除了该类的圆锥形名称,它还在测试什么?类加载器会进入其中吗?
我问的原因是,受影响的类存储在单独的“插件” jar中,我的应用在启动时会通过Child Class Loader对其进行加载。因此,对于大多数应用程序而言,它是不同的类加载器。
任何关于下一步寻找的建议将不胜感激。