我有一个单例范围的类,需要访问仅在较窄范围内下游确定的文件名字符串。通常的解决方案是将提供程序注入singleton作用域类,并在实际获得较窄的作用域对象时调用provider.get()。但是,在这种情况下,较窄的范围对象只是一个字符串,这意味着我需要使用绑定注释来区分它与其他所有字符串。两个问题:
绑定注释是否可以像注入任何其他对象一样应用于注入的提供者?
你是否同意注入文件名字符串更好,这是所有单例作用域类实际需要知道的,或者我应该采用更简单的方法,即注入其中的对象文件名字符串是否包含(并可通过getter访问)?我不喜欢后一种方法是单身类可以访问它不关心的各种东西,这似乎可能会让一些人哭泣。
谢谢!
答案 0 :(得分:2)
是的,提供商上的绑定注释应该有效。 Guice中的Key
是一个(注释,类型)元组,无论是@Foo Bar
还是@Foo Provider<Bar>
。
鉴于选择,我可能只是注入String实例,因为这就是你所需要的。看到@Filename Provider<String>
可能有点奇怪,但只要你和你的共同维护者理解它,它就是在Guice中表达这一点的最有说服力的方式。
请注意,您不要将设计从内到外调整以适应Guice。在将@Filename Provider<String>
注入@Singleton class FileSaver
之前,请确保FileSaver
根本不采用狭义的依赖关系,并将文件名作为参数放入您的而是save
或load
方法。 :)