0
我正在使用Guice作爲DI。我想創建一個通用類的動態綁定,以取代我現在創建的手動綁定。Guice - 以編程方式創建的綁定
手動方式是工作的罰款,到目前爲止:
bind(new TypeLiteral<DAOService<SourceSystem, UUID>>() {})
.to(new TypeLiteral<DAOServiceImpl<SourceSystem, UUID>>() {});
但我想是這樣的:
final String poPackage = PersistableObject.class.getPackage().getName();
final Reflections r = new Reflections(poPackage);
final Class<DAOService> ifClass = DAOService.class;
final Class<DAOServiceImpl> implClass = DAOServiceImpl.class;
for (Class<? extends PersistableObject> dbClass : r.getSubTypesOf(PersistableObject.class)) {
final ParameterizedType ifPt = Types.newParameterizedType(ifClass, dbClass, UUID.class);
final ParameterizedType implPt = Types.newParameterizedType(implClass, dbClass, UUID.class);
final TypeLiteral<?> fromLiteral = TypeLiteral.get(ifPt);
final TypeLiteral<?> toLiteral = TypeLiteral.get(implPt);
bind(fromLiteral).to(toLiteral); // not compiling!
}
這並不編譯,因爲:
[50,30] no suitable method found for to(com.google.inject.TypeLiteral<capture#1 of ?>)
有用動態創建的TypeLiterals以編程方式在Guice中創建綁定的可能性?
爲什麼你想要「動態」呢? –
你知道這是安全的,因爲你構造類型文字的方式......所以一個很好的方法是從類型文字中刪除'>',所以使用原始類型。 –
@AndyTurner:謝謝 - 解決了它。 –