Guice 辅助:未绑定使用 @com.google.inject.assistedinject.Assisted(value=prefix) 注释的 java.lang.String 的实现
Guice Assisted : No implementation for java.lang.String annotated with @com.google.inject.assistedinject.Assisted(value=prefix) was bound
我已经这样做了一百万次了,但现在它不起作用,我不知道为什么!
我的界面定义了 Writers 的合同,例如:
public interface Writer {
void exit() throws IOException;
void write(String row) throws IOException;
}
具体实现:
import com.google.inject.assistedinject.Assisted;
import javax.inject.Inject;
public class TextFileWriter implements Writer {
//...
@Inject
public TextFileWriter(@Assisted("store") String store, @Assisted("prefix") String prefix, @Assisted Line line, @Assisted LocalDate date) throws IOException {
//...
}
//...
}
现厂:
public interface WriterFactory {
Writer textWriter(String store, String prefix, Line line, LocalDate date) throws IOException;
}
最后是我的配置:
@Override
protected void configure() {
install(new FactoryModuleBuilder()
.implement(Writer.class, TextFileWriter.class)
.build(WriterFactory.class)
);
}
所有这些在启动时都会抛出一个异常:
No implementation for java.lang.String annotated with
@com.google.inject.assistedinject.Assisted(value=prefix) was bound.
while locating java.lang.String annotated with
@com.google.inject.assistedinject.Assisted(value=prefix)
for the 2nd parameter of daemons.filerecorder.TextFileWriter.(TextFileWriter.java:38)
at daemons.filerecorder.WriterFactory.textWriter(WriterFactory.java:1)
at
com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:666)
at
com.google.inject.assistedinject.FactoryModuleBuilder.configure(FactoryModuleBuilder.java:335)
(via modules: com.google.inject.util.Modules$OverrideModule ->
modules.GuiceConfig ->
com.google.inject.assistedinject.FactoryModuleBuilder)
No implementation for java.lang.String annotated with
@com.google.inject.assistedinject.Assisted(value=store) was bound.
while locating java.lang.String annotated with
@com.google.inject.assistedinject.Assisted(value=store)
for the 1st parameter of daemons.filerecorder.TextFileWriter.(TextFileWriter.java:38)
at daemons.filerecorder.WriterFactory.textWriter(WriterFactory.java:1)
at
com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:666)
at
com.google.inject.assistedinject.FactoryModuleBuilder.configure(FactoryModuleBuilder.java:335)
(via modules: com.google.inject.util.Modules$OverrideModule ->
modules.GuiceConfig ->
com.google.inject.assistedinject.FactoryModuleBuilder)
A binding to java.lang.String annotated with
@com.google.inject.assistedinject.Assisted(value=) was already
configured at daemons.filerecorder.WriterFactory.textWriter(). at
daemons.filerecorder.WriterFactory.textWriter(WriterFactory.java:1)
at
com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:666)
at
com.google.inject.assistedinject.FactoryModuleBuilder.configure(FactoryModuleBuilder.java:335)
(via modules: com.google.inject.util.Modules$OverrideModule ->
modules.GuiceConfig ->
com.google.inject.assistedinject.FactoryModuleBuilder)
有什么想法可以完成这项工作吗?
提前致谢。
将 @Assisted
添加到接口的不明确 String
类型参数中
您缺少工厂方法的 @Assisted
参数。所以调整如下:
public interface WriterFactory {
Writer textWriter(@Assisted("store") String store, @Assisted("prefix") String prefix, Line line, LocalDate date) throws IOException;
}
这在FactoryModuleBuilder
javadoc, section "Making parameter types distinct"中有解释。这是强制性的,因为您有两个相同类型的参数,String
.
我已经这样做了一百万次了,但现在它不起作用,我不知道为什么!
我的界面定义了 Writers 的合同,例如:
public interface Writer {
void exit() throws IOException;
void write(String row) throws IOException;
}
具体实现:
import com.google.inject.assistedinject.Assisted;
import javax.inject.Inject;
public class TextFileWriter implements Writer {
//...
@Inject
public TextFileWriter(@Assisted("store") String store, @Assisted("prefix") String prefix, @Assisted Line line, @Assisted LocalDate date) throws IOException {
//...
}
//...
}
现厂:
public interface WriterFactory {
Writer textWriter(String store, String prefix, Line line, LocalDate date) throws IOException;
}
最后是我的配置:
@Override
protected void configure() {
install(new FactoryModuleBuilder()
.implement(Writer.class, TextFileWriter.class)
.build(WriterFactory.class)
);
}
所有这些在启动时都会抛出一个异常:
No implementation for java.lang.String annotated with @com.google.inject.assistedinject.Assisted(value=prefix) was bound.
while locating java.lang.String annotated with @com.google.inject.assistedinject.Assisted(value=prefix) for the 2nd parameter of daemons.filerecorder.TextFileWriter.(TextFileWriter.java:38)
at daemons.filerecorder.WriterFactory.textWriter(WriterFactory.java:1) at com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:666) at com.google.inject.assistedinject.FactoryModuleBuilder.configure(FactoryModuleBuilder.java:335) (via modules: com.google.inject.util.Modules$OverrideModule -> modules.GuiceConfig -> com.google.inject.assistedinject.FactoryModuleBuilder)No implementation for java.lang.String annotated with @com.google.inject.assistedinject.Assisted(value=store) was bound.
while locating java.lang.String annotated with @com.google.inject.assistedinject.Assisted(value=store) for the 1st parameter of daemons.filerecorder.TextFileWriter.(TextFileWriter.java:38)
at daemons.filerecorder.WriterFactory.textWriter(WriterFactory.java:1) at com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:666) at com.google.inject.assistedinject.FactoryModuleBuilder.configure(FactoryModuleBuilder.java:335) (via modules: com.google.inject.util.Modules$OverrideModule -> modules.GuiceConfig -> com.google.inject.assistedinject.FactoryModuleBuilder)A binding to java.lang.String annotated with @com.google.inject.assistedinject.Assisted(value=) was already configured at daemons.filerecorder.WriterFactory.textWriter(). at daemons.filerecorder.WriterFactory.textWriter(WriterFactory.java:1)
at com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:666) at com.google.inject.assistedinject.FactoryModuleBuilder.configure(FactoryModuleBuilder.java:335) (via modules: com.google.inject.util.Modules$OverrideModule -> modules.GuiceConfig -> com.google.inject.assistedinject.FactoryModuleBuilder)
有什么想法可以完成这项工作吗?
提前致谢。
将 @Assisted
添加到接口的不明确 String
类型参数中
您缺少工厂方法的 @Assisted
参数。所以调整如下:
public interface WriterFactory {
Writer textWriter(@Assisted("store") String store, @Assisted("prefix") String prefix, Line line, LocalDate date) throws IOException;
}
这在FactoryModuleBuilder
javadoc, section "Making parameter types distinct"中有解释。这是强制性的,因为您有两个相同类型的参数,String
.