1)のように、名前のインジェクタによって直接注入し
public class ValidationServiceProviderImpl implements ValidationServiceProvider {
@Inject
@Named("ClientA")
private ValidationService clientAValidationService;
@Inject
@Named("ClientB")
private ValidationService clientBValidationService;
public ValidationService getValidationServiceForClient(String clientName) {
switch (clientName) {
case "ClientA": return clientAValidationService;
case "ClientB": return clientBValidationService;
}
return null; // return default validationService for any other client
}
}
public interface ValidationServiceProvider {
ValidationService getValidationServiceForClient(String clientName);
}
構成:
Injector injector = Guice.createInjector(new AbstractModule() {
protected void configure() {
bind(ValidationService.class)
.annotatedWith(Names.named("ClientA"))
.to(ClientA_ValidationService.class);
bind(ValidationService.class)
.annotatedWith(Names.named("ClientB"))
.to(ClientB_ValidationService.class);
bind(ValidationServiceProvider.class)
.to(ValidationServiceProviderImpl.class);
}
});
例使用プロバイダ:
直接
例使用した注射器は:
ValidationService clientA =
injector.getInstance(Key.get(ValidationService.class, Names.named("ClientA")));
ValidationService clientB =
injector.getInstance(Key.get(ValidationService.class, Names.named("ClientB")));
これは問題のようです。物事を明らかにするために - もし私が5人のクライアントを持っていれば、私は5人のインジェクターで終わるでしょう。また、それらをHashMapに格納すると、クライアントIDを使用してインジェクタを取得するのに役立ちます。それは正しいアプローチですか? –
@giri_colそうですね。 'ValidationService'実装ごとにインジェクタを保持する必要があります。それのようなもの - https://gist.github.com/KetothXupack/b4f6786a1590c7a2466be5f9523a564a – vsminkov