Kullanıcı girdisine bağlı olarak birden fazla enjeksiyon işlemini desteklemek için çalışma zamanında Guice enjeksiyonlarını değiştirebilmeyi isterim.Çalışma zamanında Guice bağlarının değiştirilmesi
public interface IDao {
public int someMethod();
}
public class DaoEarth implements IDao {
@Override
public int someMethod(){ ... }
}
public class DaoMars implements IDao {
@Override
public int someMethod(){ ... }
}
public class MyClass {
@Inject
private IDao myDao;
public int myMethod(String domain) {
//If Domain == Earth, myDao should be of the type DaoEarth
//If Domain == DaoMars, myDao should be of the type DaoMars
}
}
Kendi Sağlayıcı yazmayı düşünüyorum, ama ben zamanında benim bağları değiştirmek o sağlayıcı nasıl kullanılacağını bilmiyorum: Bu benim başarmak istiyoruz şeydir. Herhangi bir giriş hoşgeldiniz ve takdir :)! Burada şu anda ile geldi ne
Update ben istediğim kadar hoş değil, bu yüzden hala geribildirim arıyorum
public class DomainProvider {
@Inject @Earth
private IDaoProvider earthDaoProvider;
@Inject @Mars
private IDaoProvider marsDaoProvider;
public IDaoProvider get(Domain domain){
switch (domain){
case EARTH:
return earthDaoProvider;
case MARS:
return marsDaoProvider;
}
}
public IDaoProvider get(String domain){
Domain parsedDomain = Domain.valueOf(domain.toUpperCase());
return get(parsedDomain);
}
}
//MarsDaoProvider would be equivalent
public class EarthDaoProvider implements IDaoProvider {
@Inject @Earth
private IDao earthDao;
public IDao getDao() {
return earthDao;
}
}
This means that in "MyClass", I can do:
public class MyClass {
@Inject
private DomainProvider domainProvider;
public int myMethod(String domain) {
IDaoProvider daoProvider = domainProvider.get(domain);
IDao dao = daoProvider.getDao();
//Now "dao" will be of the correct type based on the domain
}
}
//Of course elsewhere I have the bindings set like
bind(IDao.class).annotatedWith(Earth.class).to(EarthDao.class);
Yardımlı enjeksiyonun bana nasıl yardımcı olabileceğinden tam olarak emin değilim. Yardımlı enjeksiyonun, sağlanan parametrelerle enjekte edilen parametreleri birleştirmenize izin vermesini sağlarım, ancak durumum için bunun nasıl çalışacağından tam olarak emin değilim. – Nepoxx