我使用的是一个FileHandler类,它将File作为ctor参数。
我想和两个不同的File一起使用它。
如何配置注射器每次注入不同的File?
与getInstance一样,它会返回所需的具体实例吗?
注释在这里不会有帮助,就好像我把它放在ctor中一样,对于这个ctor的所有用法,仍然会有一个注释。
public class StringFileWriter implements IResponsesStorage {
File file;
@Inject
@Singleton
public StringFileWriter(@myAnnotation File file) {
this.file = file;
}和
public class MainModule extends AbstractModule {
@Override
protected void configure() {
File resultBaselineFile = new File(Constants.RESULTS_BASELINE_FILE);
bind(File.class).annotatedWith(ResultBaselineFile.class).toInstance(resultBaselineFile);
File logLatencyFile = new File(Constants.LATENCY_FILE);
bind(File.class).annotatedWith(LatencyLogFile.class).toInstance(logLatencyFile);编辑
主要代码调用2个存储库:一个用于日志文件,另一个用于结果文件。每个存储库都有自己的文件处理程序。这就是问题所在
发布于 2015-02-27 17:51:26
这是对所谓的“机器人腿”问题的一种变化.正如上面的评论所要求的那样,正确的解决方案实际上取决于决策的位置。
在这种情况下,我将如何解决这个问题:
public final class StringFileWriter implements IResponsesStorage {
private final File file;
// Note: constructor is not annotated with @Inject
StringFileWriter(File file) {
this.file = file;
}
// ...
}
public final class StringFileWriterModule extends AbstractModule {
@Override protected void configure() {}
@Provides
@Singleton
@ResultBaselineFile
StringFileWriter provideResultBaselineFileWriter(
@ResultBaselineFile File resultBaselineFile) {
return new StringFileWriter(resultBaselineFile);
}
@Provides
@Singleton
@LatencyLogFile
StringFileWriter provideLatencyLogFileWriter(
@LatencyLogFile File latencyLogFile) {
return new StringFileWriter(latencyLogFile);
}
}然后,在注入点,您将选择您想要的StringFileWriter:
final class MyWorkerClass {
private final StringFileWriter resultBaselineFileWriter;
@Inject MyWorkerClass(@ResultBaselineFile StringFileWriter writer) {
resultBaselineFileWriter = writer;
}
// ...
}https://stackoverflow.com/questions/28550093
复制相似问题