我正在尝试Guice。我做了一个简单的示例,它与Guice Getting Started手册中的示例非常相似。

但是一段时间没有起作用,并说:


  找不到合适的构造函数
  在mypack.ServiceUser中。上课必须
  有一个(只有一个)
  用@Inject注释的构造函数或
  零参数构造函数
  不是私人的在
  mypack.ServiceUser.class(ServiceUser.java:14)
  在定位mypack.ServiceUser时


问题出在进口方面。我将Google Guice和TestNG都附加到了该项目。我从org.testng.guice包中导入了类。但是注释Inject是从javax.inject包中导入的。将导入更改为org.testng.guice.Inject后,我的程序开始工作。

但是在那之后,我又玩了进口游戏。我将所有org.testng导入都更改为com.google.inject。该程序仍然有效。之后,我返回到@Inject批注并将其导入更改为javax.inject.Inject(就像我的第一个损坏版本一样)。而且该程序甚至在此之后仍然有效。

我再次检查了一下:来自TestNG软件包的Guice无法与javax.inject.Inject一起使用,而来自Google软件包(com.google.inject)的Guice可以正常使用。

为什么这么奇怪?

ps。我同时使用了Guice和TestNG的最新版本(guice-3.0-rc1和testng-5.14.5)。

最佳答案

简短的答案是:@Guice仍在开发中,在我们发言时已在邮件列表中进行了设计,因此仍处于试验阶段。

另外,您使用的是未记录的软件包,这些软件包保留给TestNG内部使用(org.testng.guice)。

我今天才推送了一个新版本,您可以在http://testng.org/beta下载它

请注意,此新版本不再包含org.testng.guice,因此请确保每当需要Guice符号时,都从com.google.inject导入它们。

如果您还有其他问题/疑虑,请在testng-users邮件列表中发布。

谢谢。

09-13 14:06