ı bu arayüzü var diyelimParametreleri Guice ile Sağlayıcıya nasıl geçiririm? o zaman bu uygulama</p> <pre><code>public interface DbMapper{ } </code></pre> <p>Ve:
public interface NameDbMapper extends DbMapper {
@SqlUpdate("insert into names (name) values (:name)")
void insert(@Bind("name") String name);
}
Bu uygulama bir modül var, bu yüzden derleme anda tüm DbMappers bilmiyorum. Ben yansıma yoluyla DbMappers keşfetmek:
public class DbMapperProvider implements Provider<DbMapper> {
private final User user;
@Inject
public DbMapperProvider(User user) {
this.user = user;
}
@Override
public DbMapper get() {
String jdbc = user.getJdbc();
DBI userSpecificDatabase = new DBI(jdbc, "user", "password");
//How to replace NameDbMapper.class here with the db variable in GuiceModule?
DbMapper dbMapper = userSpecificDatabase.onDemand(NameDbMapper.class);
return dbMapper;
}
}
Kullanıcı bir @RequestScoped örneğidir, bu yüzden GuiceModule düzenli sağlayıcıları oluşturamazsınız:
public class GuiceModule extends AbstractModule{
@Override
protected void configure() {
Reflections reflections = new Reflections("com.company");
Set<Class<? extends DbMapper>> dbMappers = reflections.getSubTypesOf(DbMapper.class);
for (Class<? extends DbMapper> dbMapper : dbMappers) {
Class<DbMapper> db = (Class<DbMapper>) dbMapper;
binder().bind(db).toProvider(DbMapperProvider.class);
}
}
Sonra benim sağlayıcısı haritacılarla instansiate. Enjekte eden Kullanıcı çalışır, ancak DbMapperProvider'da NameDbMapper kodunun yerine hangi Sınıf DBI'nın kullanması gerektiğini nasıl iletirim?
http://google-guice.googlecode.com/git/javadoc/com/google/inject/assistedinject/FactoryModuleBuilder.html numaralı makalede önerilen yaklaşımı denedim ancak işe alamadı.
Buradaki amaç, modüllerin kendi sağlayıcılarını yazmaları gerekmemesi gerektiğidir, bu mümkün mü?
ya biz bir HTTP Servlet içeride halen değildir istek veya com.google.inject.servlet.GuiceFilter'ı bu istek için bir sunucu filtresi olarak uygulamayı unutmuş olabilirsiniz. ", Bazı nedenlerden dolayı Guice başlatma sırasında hevesle örnekler oluşturmaya çalışır? – jontejj
Elbette. Bunun yerine bir Sağlayıcı enjekte edebilirsiniz. –
Vay! Bunun için bir demet teşekkürler. +1 – jontejj