代码之家  ›  专栏  ›  技术社区  ›  Vinay Lodha

Eclipse-谷歌指南

  •  3
  • Vinay Lodha  · 技术社区  · 15 年前

    我一直在尝试在Eclipse插件开发中使用GoogleGuice。我已经将guice jar作为另一个插件项目导入。但不知何故,Guice无法注入依赖项。

    有什么想法吗????

    这是错误信息

    com.google.inject.ConfigurationException: Guice configuration errors:
    
    1) No implementation for java.util.List<java.lang.String> was bound.
      while locating java.util.List<java.lang.String>
        for parameter 1 at com.checker.extension.provider.util.PluginUtils.<init>(Unknown Source)
      while locating com.checker.extension.provider.util.PluginUtils
    
    1 error
    

    编辑1

    我想提的一件事是,当我使用 普通Java应用程序 但我用的时候没有 插件项目

    编辑2 下面是我使用的代码

    @Override
        protected void configure() {
    
            bind(List.class).toInstance(DIObjects.buildFolderNames);
        }
    

    在这里 DIObjects.buildFolderNames 是我需要注入的静态字段。 diobjects.buildfoldername的定义如下。

    public static List<String> buildFolderNames;
    

    我已经初始化了这个字段。

    问题是因为Eclipse和Guice的类加载器不同吗????

    4 回复  |  直到 13 年前
        1
  •  9
  •   gpampara    15 年前

    你需要使用 TypeLiteral 要执行这样的绑定,例如:

    bind(new TypeLiteral<List<String>>(){}).toInstance(new ArrayList<String>());
    

    有关绑定的详细信息可用 here .

        2
  •  2
  •   Ladlestein    15 年前

    为我工作。但我做了一些不同的事情——我去了SpringSource企业包存储库,下载了他们的guice 2.0包及其唯一的依赖项AOP联盟API 1.0.0包。然后我将插件中的依赖项添加到了guice包中。我创建了一个与您类似的静态成员变量,初始化为字符串的短列表,并将其绑定到列表;然后,在TableViewer中,创建了一个内容提供程序,它获取注入器并调用getInstance(list.class),将返回值转换为数组并返回它。结果:我的字符串在表中可见。

    这是两个包的页面链接。在每个页面上都有指向二进制jar和源jar的链接。获取其中一个;将它们导入您的工作区;将依赖项从您的包添加到guice包中;应该这样做。

    http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.com.google.inject&version=2.0.0&searchType=bundlesByName&searchQuery=guice

    http://www.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.aopalliance&version=1.0.0

        3
  •  2
  •   PhiLho    13 年前

    在我看来,这是一个配置/注释问题(乍一看)。根据 this article 你得加注释 List 指定要插入的列表类型。

    如果代码中的绑定正确,请确保包含绑定/注释类的包已正确导出并在插件配置中正确声明。也许Guice只是看不到绑定。

        4
  •  -2
  •   Alexander Kjäll    15 年前

    你做过这样的事吗?

    绑定(list.class).to(arraylist.class);

    在你的班上安排你的座位?因为列表只是一个接口,所以Guice不知道要选择什么实现。