У меня есть настройка, где я связываю несколько экземпляров одного класса. Разница между классами - это один входной параметр. Два экземпляра всегда вводятся.Может ли поставщик выбирать между разными экземплярами
Эти крепления выглядят следующим образом.
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();
}
Есть ли способ заставить провайдера дать мне правильные экземпляры классов, которые я ввел в настройку?
Если например я хочу ServiceOne
получить Writer с именем "config:export.writer.translation"
И ServiceTwo
"config:export.writer.review"
получить
Или я должен abandond провайдера и использовать @Named
в конструкторах услуг.
public ServiceTwo(@Named("config:export.writer.review") CmsExportWriter writer)
Просто использование @Named не даст мне льготы в качестве Провайдера. И мне нужно, чтобы это были новые экземпляры писателей каждый раз.
Похоже, что путь заключается в том, чтобы вместо этого вводить Провайдеров.