1

我有一个单例范围的类,它需要访问一个文件名字符串,该字符串只能在更窄的范围内确定下游。通常的解决方案是将提供程序注入到单例范围的类中,并在实际需要获取更窄范围的对象时调用 provider.get()。然而,在这种情况下,范围更窄的对象只是一个字符串,这意味着我需要使用绑定注释来将其与其他所有字符串区分开来。两个问题:

  1. 绑定注释可以像任何其他注入对象一样应用于注入的提供者吗?

  2. 您是否同意最好只注入文件名字符串,这是单例作用域类真正需要了解的所有内容,还是我应该采取更简单的方法,即注入包含文件名字符串的对象(并且可通过吸气剂访问)?我不喜欢后一种方法的是单例类可以访问它不关心的各种东西,这似乎会让一些人哭泣。

谢谢!

4

1 回答 1

2
  1. 是的,Providers 上的绑定注释应该可以工作。KeyGuice 内部是一个 (annotation, type) 元组,无论是表示为@Foo Bar还是@Foo Provider<Bar>

  2. 如果可以选择,我可能只会注入 String 实例,因为这就是您所需要的。看到它可能有点奇怪,@Filename Provider<String>但只要你和你的共同维护者理解它,这是在 Guice 中表达这一点的最雄辩的方式。

请注意不要将设计从里到外翻转以适应 Guice。在将 a@Filename Provider<String>注入 a之前@Singleton class FileSaver,请确保根本不采用FileSaver范围狭窄的依赖项,并将文件名作为saveorload方法的参数放入其中并不容易。:)

于 2013-02-11T04:53:26.493 回答