gwt - 工厂 "Unable to create or inherit binding"的 GIN AssistedInject 问题

标签 gwt guice gwt-platform gwt-gin assisted-inject

我遇到一个奇怪的错误,在使用辅助注入(inject)时我无法克服:

[DEBUG] [project] - Rebinding com.gwtplatform.mvp.client.DesktopGinjector
[DEBUG] [project] - Invoking generator com.google.gwt.inject.rebind.GinjectorGenerator
    [ERROR] [project] - Factory com.jorsek.editor.gin.EditorClientFactory could not be created
    [ERROR] [project] - Error injecting com.jorsek.editor.gin.EditorClientFactory: Unable to create or inherit binding: No @Inject or default constructor found for com.jorsek.editor.gin.EditorClientFactory

所需节点的路径:

com.projectname.client.application.resourceworkspace.ResourceWorkspacePresenter [com.gwtplatform.mvp.client.gin.AbstractPresenterModule.bindPresenter(AbstractPresenterModule.java:122)] -> com.jorsek.editor.gin.EditorClientFactory [@Inject com.projectname.client.application.resourceworkspace.ResourceWorkspacePresenter 的构造函数]

以下是我如何设置所有内容:

我的工厂:

public interface EditorClientFactory {

/**
 * Create a new DOMModel via assisted injection initializing the model 
 * with the document entity and it's DOM document content.
 * 
 * @param document
 * @param domDocument
 * @return
 */
public DOMModel create(Entity document, Document domDocument);
}

我的模块:

public class EditorClientModule extends AbstractGinModule {

@Override
protected void configure() {

    install(new GinFactoryModuleBuilder().build(EditorClientFactory.class));

    bind(DOMModel.class).to(SyncedDOMModel.class);
}

}

com.jorsek.editor.impl.SyncedDOMModel:

public class SyncedDOMModel implements DOMModel {



@Inject
private SyncedDOMModel(){} /* For GIN/GUICE */

@AssistedInject
public SyncedDOMModel(CollabClient client, CollabClientFactory collabFactory, @Assisted Entity ref, @Assisted Document domDoc){
    }
}

这就是我尝试注入(inject)我的工厂以供使用的方式:

@AssistedInject
public ResourceWorkspacePresenter(final EventBus eventBus, final MyView view, final MyProxy proxy, APIService apiService, EditorClientFactory editorFactory, @Assisted EntityLocator entityLocator) {
    super(eventBus, view, proxy, ApplicationPresenter.TYPE_SetMainContent);


    this.editorFactory = editorFactory;
    this.apiService = apiService;
     System.out.println("E Locator: " + entityLocator);

}

这就是我尝试使用我的工厂的方式(虽然从来没有走到这一步):

editorFactory.create(doc, domDoc);

谁能看出为什么会这样?

如果有帮助,我正在使用 GWTP RC2。

谢谢,

凯西

最佳答案

你的代码不正确(我不知道它是否能解决你的问题,但这是一个开始):你不应该 bind(DOMModel.class) 而是告诉工厂:

install(new GinFactoryModuleBuilder()
    .implement(DOMModel.class, SyncedDOMModel.class)
    .build(EditorClientFactory.class));

关于gwt - 工厂 "Unable to create or inherit binding"的 GIN AssistedInject 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311419/

相关文章:

java - 封装 "modules"的最佳 GWT CodeSplitting 设计

java - 是否可以将 Spring Security 与 Google Guice 一起使用?

guice - 如何使用@Named绑定(bind)两个multibinder但接口(interface)类型相同?

gwt - 在大型企业应用程序中使用 GWT

java - GWT 2.1 编辑器框架如何支持原始类型?

html - GWT 将 FlowPanel 视为 HTML 上下文 - 为什么?

java - NoSuchMethodFound 错误 : dependency error in GWTP. ResourceDelegate 使用情况

java - 如何将 GWTP 与 ginjector 扩展一起使用?

java - 如何获取 Google Apps 用户的管理员状态

java - Google Guice 配置错误(未绑定(bind)实现)