Я хотел бы сделать это так!
Я бы создал ParentModul
, который сканировал бы предопределенную папку для конфигураций поставщиков и установил Private module
для каждой найденной конфигурации поставщика. Частный модуль инкапсулирует привязку из других модулей, поэтому вы можете привязать свои свойства от config как constants
, например @Named("vendor_name") String vendorName
.
Посмотрите на эту презентацию, это может дать вам лучшее объяснение того, как использовать свойство частного модуля. Существует также пример github. http://slid.es/milanbaran/dec
Есть некоторые фрагменты:
Родитель Модуль:
protected void loadVendorModules(String config) {
File configDir = new File(config);
if(!configDir.exists()) {
addError("Configuration directory [%s] doesn't exist. Also, it should contain broker definition files. [broker*.yml]",config);
}
if(!configDir.isDirectory()) {
addError("The `dir.config` parameter is supposed to be a directory. Actually it is not %s",config);
}
broker_files = new File(config).listFiles(new PatternFilenameFilter(FILE_PATTERN));
if(broker_files==null || broker_files.length==0) {
addError("Configuration directory [%s] doesn't contain any broker definition files, please add at least one to start.",config);
}
for(File f : broker_files) {
install(new VendorPrivateModule<T>(f.getAbsolutePath()));
}
return;
}
Производитель Частный Модуль:
protected void configure() {
....
if(config.getConfig()!=null) {
for(String name : config.getConfig().keySet()) {
String value = config.getConfig().get(name);
if(value!=null) {
bind(Key.get(String.class, Names.named(name)))
.toInstance(value);
} else {
bind(Key.get(String.class, Names.named(name)))
.toProvider(Providers.of((String) null));
}
}
}
...
что-то не слишком ясно, здесь для меня. В моей VendorStream.java и моей VendorStreamChild.java у меня было бы @Inject в поле, но его свойство должно меняться ... Думаю, я могу сделать это только с несколькими модулями, которые казались уродливыми. –
Дин, сложность не исчезнет, просто используя некоторые классные сексуальные технологии. Если ваша собственность нуждается в изменении, у вас нет другого выбора. Я думаю, что повторное использование частных модулей с высоким уровнем инкапсуляции привязки - это чистое превосходство. Если вы хотите, чтобы я помог вам отправить мне электронное письмо и поделиться исходным кодом. Трудно объяснить мое воображение вашей проблемы. –