我有一个设置,我绑定一个类的多个实例。类之间的差异是一个输入参数。这两个实例总是被注入。
绑定看起来像这样。
CmsExportAwsWriterSingle cmsExportAwsWriterSingleTranslation = new CmsExportAwsWriterSingle("testing-v1", getCredentials(id, secret));
bind(CmsExportWriter.class)
.annotatedWith(Names.named("config:export.writer.translation"))
.toInstance(cmsExportAwsWriterSingleTranslation);
CmsExportAwsWriterSingle cmsExportAwsWriterSingleReview = new CmsExportAwsWriterSingle("prod-v1", getCredentials(id, secret));
bind(CmsExportWriter.class)
.annotatedWith(Names.named("config:export.writer.review"))
.toInstance(cmsExportAwsWriterSingleReview);
现在我有两个使用javax.inject Provider的服务给我一个编写器的实例。
@Inject
public ServiceOne(Provider<CmsExportWriter> writer) {
CmsExportWriter writer = writer.get();
}
@Inject
public ServiceTwo(Provider<CmsExportWriter> writer) {
CmsExportWriter writer = writer.get();
}
有没有办法让提供商给我正确的设置中注入的类的实例?
E.g如果我希望ServiceOne
获得名为"config:export.writer.translation"
的作家
并ServiceTwo
获取"config:export.writer.review"
或者我是否必须放弃提供程序并在服务的构造函数中使用@Named
。
public ServiceTwo(@Named("config:export.writer.review") CmsExportWriter writer)
使用@Named不会像提供商那样给我额外的好处。我每次都需要它成为作家的新实例。
看起来要做的就是注入提供者。
答案 0 :(得分:0)
提供程序用于在每次调用get方法时创建新实例。这适用于这样的情况,即在创建封闭对象时不能/不应该注入依赖项实例,或者如果需要多个实例等。这对于多个绑定的注入没有任何作用。
使用多个绑定注入实例的正确方法是通过绑定注释。绑定注释有两种类型:内置@Named注释或自定义注释,应根据标准模板实现。
您可以找到一些示例here