1

我正在进入控制反转,特别是使用Android 和我有一个问题GuiceRoboGuice

我有一个返回资源(本质上是 XML 或 JSON 字符串)的方法调用。

public Resource getResource(){
// Some implementation details that call a web service and throw the result in a string...
String resource = ........
}

该类Resource实际上只是一个 Wrapped String,所以我认为在构造函数中传递它是有意义的,因为它是Resource对象的重要组成部分。

public class Resource{
   Resource(String theXMLorJSON){
   ...
   }
}

几个问题:

  1. 如何ResourcegetResource通话中构造一个新的?我认为我想使用 IoC 而不是调用new该方法。
  2. 如果另一个类在构造函数中使用a,当我在构造时需要动态时Resource,如何使用容器来构造它?我刚刚问了一个类似的问题 ,并相信可能有一种特定的方法可以使用. GuiceStringGuice

非常感谢!

4

1 回答 1

2

我认为您可能对依赖注入有误解。您无需尝试避免new所有情况下使用...您主要希望避免使用new来创建您可能希望能够模拟进行测试的任何内容,并且通常最好允许容器连接任何依赖于这样一个对象的类。

但是,您的Resource类听起来像是一个简单的值对象,您可以在进行的任何测试中轻松地手动创建它。它也不依赖于任何类型的服务......它只包含一个String. 所以没有理由尝试让容器创建它。

另一方面,包含该getResource()方法的类,您肯定希望创建容器,因为您希望能够在测试中使用依赖于该类的东西,而不必实际调用 Web 服务。

请注意,如果您有一个带有构造函数的类,该构造函数同时接受您希望由容器注入的依赖项和仅在运行时知道的参数,您需要使用仅接受运行时参数的方法创建某种中间工厂。使用 Guice,您可以使用Assisted Inject从接口自动创建这样的工厂(不确定这是否适用于 RoboGuice,但手动创建这样的工厂实现也很容易)。

于 2011-11-19T22:09:17.803 回答