gpt4 book ai didi

java - 使用 Roboguice 的 Android 工厂辅助注入(inject)不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:22 25 4
gpt4 key购买 nike

我试图在构造函数中传递一些参数时注入(inject)一些类。为了实现这一目标,我发现这个问题( 12 )说这可以通过使用工厂辅助注入(inject)来实现。这就是我的代码的样子,遵循提供的示例并在阅读相关文档后进行了一些修改。

gradle脚本

dependencies { 
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
compile 'com.google.inject.extensions:guice-assistedinject:3.+'
}

具有接受参数的创建方法的工厂接口(interface)

public interface ICustomObjectFactory {
ICustomObject create(Callback callback);
}

实现接口(interface)的类

public class CustomObject implements ICustomObject {
protected String name;

@AssistedInject
public CustomObject(@Assisted Callback callback){
this.callback = callback;
}
}

从 Aplication 类使用和调用的模块

public class SomeModule extends Module {

@Override
protected void configure() {
install(new FactoryModuleBuilder()
.implement(ICustomObject.class, CustomObject.class)
.build(ICustomObjectFactory.class));
}
}

从应用程序类注册的注入(inject)模块

@Override
public void onCreate() {
super.onCreate();

RoboGuice.getOrCreateBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE,
RoboGuice.newDefaultRoboModule(this), new SomeModule(this));
}

工厂的使用

public class SomeClass implements Callback {

@Inject ICustomObjectFactory factory;

public SomeClass () {
ICustomObject first = this.factory.create(this);
}
}

像这样,当我尝试使用工厂时,我收到此错误,因为它已在 SomeClass 中使用

java.lang.IllegalStateException: Factories.create() factories cannot be used until they're initialized by Guice.
at com.google.inject.internal.util.$Preconditions.checkState(Preconditions.java:142)
at com.google.inject.assistedinject.FactoryProvider2.getBindingFromNewInjector(FactoryProvider2.java:564)
at com.google.inject.assistedinject.FactoryProvider2.invoke(FactoryProvider2.java:625)
at java.lang.reflect.Proxy.invoke(Proxy.java:397)
at $Proxy12.create(Unknown Source)

有人知道为什么工厂没有初始化吗?我知道应该由模块初始化,并且我确信它被调用的模块。

我的代码和链接问题中的代码之间最显着的区别是,在问题中,构造函数用 @Inject 注释,而不是 @AssistedInject。在此修改之前,我在编译应用程序时遇到此错误。

Error:Execution failed for task ':app:compileDebugJavaWithJavac'. java.lang.ClassCastException: com.sun.tools.javac.code.Type cannot be cast to javax.lang.model.type.DeclaredType dle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.) Re-download dependencies and sync project (requires network)

  • The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem. Stop Gradle build processes (requires restart)
  • Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.
  • In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

    也许这不是实现我需要的最佳方法。如果不是,有人能给我指出正确的方向吗?

    谢谢大家的帮助

    最佳答案

    最后,我通过在 Application 类中添加 RoboGuice.setUseAnnotationDatabases(false) 来使其工作:

    @Override
    public void onCreate() {
    super.onCreate();

    RoboGuice.setUseAnnotationDatabases(false);
    RoboGuice.getOrCreateBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE,
    RoboGuice.newDefaultRoboModule(this), new SomeModule(this));
    }

    关于java - 使用 Roboguice 的 Android 工厂辅助注入(inject)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37294091/

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