μμ μΈμ ν°κ° μκ³ λΆλͺ¨ μΈμ ν°μ μμμ μ μλ λ°μΈλ© κ°μ μμ²νλ©΄ "μ΄λ―Έ νλ μ΄μμ μμ μΈμ ν°μ ꡬμ±λμμ΅λλ€" μ€λ₯κ° λ°μν©λλ€.
"νμ μΈμ ν°μ ꡬμ±λμ΄ μμ§λ§ ...μ λν ꡬνμ΄ λ°μΈλ©λμ§ μμμ΅λλ€"λΌκ³ λ§νλ κ²μ΄ μ’μ΅λλ€.
λ€μμ μν μ½λμ λλ€.
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
public class GuiceBug {
public static void main(String[] args) {
Injector i1 = Guice.createInjector();
Injector i2 = i1.createChildInjector(
new AbstractModule() {
<strong i="8">@Override</strong>
protected void configure() {
bind(IStuff.class).to(Stuff.class);
}
});
i1.getInstance(IStuff.class);
}
static interface IStuff {}
static class Stuff implements IStuff {}
}
Exception in thread "main" com.google.inject.ConfigurationException: Guice configuration errors:
1) Unable to create binding for org.enercoop.test.GuiceBug$IStuff. It was already configured on one or more child injectors or private modules
bound at org.enercoop.test.GuiceBug$1.configure(GuiceBug.java:15)
If it was in a PrivateModule, did you forget to expose the binding?
while locating org.enercoop.test.GuiceBug$IStuff
1 error
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:961)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013)
at GuiceBug.main(GuiceBug.java:18)
μ€ν΄μ μμ§κ° μλ€κ³ λ§νλ μ΄μ λ 무μμ λκΉ? μ€λ₯λ μ νν©λλ€. μμμ λ°μΈλ©λμ΄ μκΈ° λλ¬Έμ λΆλͺ¨λ‘λΆν° λ°μΈλ©μ κ°μ Έμ¬ μ μμ΅λλ€. "ꡬνμ΄ λ°μΈλ©λμ§ μμ"μΌλ‘ μ΄λλ κ²μ λ μ€ν΄μ μμ§κ° μλ κ²μ²λΌ 보μ λλ€. μλνλ©΄ νλλ _was_ λ°μΈλ©λμ΄ μκΈ° λλ¬Έμ λλ€. λ¨μ§ λ€λ₯Έ μμΉμ μμ΅λλ€.
" μ΄λ―Έ ꡬμ±λμμ΅λλ€"λΌκ³ λ§νλ©΄ κ·Έλ μ§ μμ λ λ² κ΅¬μ±λμλ€κ³ μκ°ν©λλ€. λ€λ₯Έ μμΉμμ ꡬμ±λμμμ μμνμ§ μμ΅λλ€. λΆλͺ¨μ μμ λͺ¨λμμ λ°μΈλ©μ ꡬμ±νλ©΄ "...μ λν λ°μΈλ©μ΄ μ΄λ―Έ ...μ ꡬμ±λμμ΅λλ€."λ νμλ©λλ€.
λΉμ μ΄ νλμ μ¬κ³Όλ₯Ό κ°μ§κ³ μκ³ λκ΅°κ°κ° κ·Έ μ¬κ³Όλ₯Ό κ°μ Έκ°λ€λ©΄, λΉμ μ΄ κ·Έκ²μ μ»μΌλ €κ³ ν λ κ²°κ³Όλ "λΉμ μ ν μ μμ΅λλ€, λκ΅°κ°κ° μ΄λ―Έ μ¬κ³Όλ₯Ό κ°μ Έκ°μ΅λλ€"μ λλ€. μ¬κ³Όλ λ λ² λ¨Ήμ§ μμμ΅λλ€. λΉμ μ΄ κ·Έκ²μ μ»μΌλ €κ³ ν λ(λΉμ μ μν΄ μ²μμΌλ‘, μ΄ λ λ²μ§Έλ‘), λΉμ μ κ·Έκ²μ΄ μ΄λ―Έ μ¬μ©λμλ€λ λ§μ λ£μ΅λλ€.
μ΄κ²μ λμΌν©λλ€. (μμ§ μ‘΄μ¬νμ§ μλ λ°μΈλ©μ κ°μ Έμ€λ λ°©λ²μΌλ‘) λΆλͺ¨μ λν λ°μΈλ©μ λ§λ€λ €κ³ νλ©΄ κ²°κ³Όλ μμ μΈμ ν°μ μ΄λ―Έ ꡬμ±λμ΄ μκΈ° λλ¬Έμ λ°μΈλ©μ λ§λ€ μ μλ€λ λ©μμ§κ° νμλ©λλ€.
λλ λΉμ μ μμ μ μ΄ν΄νμ§λ§ " μμ μΈμ ν°μ μμκ° λΆλͺ¨μκ² νμλμ§ μκΈ° λλ¬Έμ" μ¬μ ν νΌλμ€λ½μ΅λλ€. λ°λΌμ λΆλͺ¨λ‘λΆν° μ μλμ§ μμ 무μΈκ°λ₯Ό μνλ©΄ μμμ μ μλκ±°λ μ μλμ§ μμ κ²μ΄ μλλΌ κ·Έ λλ¬Έμ μ€ν¨ν©λλ€.
κ·Έκ²μ μλͺ»λ κ²μ λλ€. μμμ μ μλμ΄ μκΈ° λλ¬Έμ μ ννκ² μ€ν¨ν©λλ€. λΆλͺ¨μ μ μλμ§ μμ κ²½μ° λ°μΈλ©μ λ°νμμ Just-In-Time λ°μΈλ©μΌλ‘ μμ±λ©λλ€. κ·Έλ¬λ λ°μΈλ©μ΄ μ΄λ―Έ μμμ μ‘΄μ¬νκ³ Guiceλ λΆλͺ¨μ μμ λͺ¨λμμ λ°μΈλ©μ νμ©νμ§ μκΈ° λλ¬Έμ just-in-time λ°μΈλ©μ λ§λ€ μ μμ΅λλ€.
@laurentmartelli κ° μ΄ μ€λ₯μ λν΄ μ³μλ€κ³ μκ°νμ§ μμ μ μμ΅λλ€.
bind
νΈμΆ μ μ΄ μ€λ₯κ° λ°μν©λλ€.bind
νΈμΆμ μ£Όμ μ²λ¦¬νλ©΄ " No implementation for
... was bound
"κ° νμλ©λλ€.λ°μΈλ©μ΄ λ무 λ§μΌλ©΄ μ΄λ»κ² λ°μΈλ© νλλ₯Ό μ κ±°νκ³ μΆ©λΆνμ§ μμ μ μμ΅λκΉ?
μ°Έκ³ λ‘ μ λ μ΄κ²μ΄ λ§€μ° νΌλμ€λ½μ΅λλ€.
NB μ°¨μΌλ μΈμ ν° λ λ§€μ° νΌλμ€λ½μ΅λλ€. λ΄λΆμ μΌλ‘ μ¬μ©νμ§ μμΌλ €κ³ λ Έλ ₯ν©λλ€.
μ, μ€λ₯ λ©μμ§κ° νΌλμ€λ½μ΅λλ€. κ·Έλ¬λ μ΄μ μΈν°λ· κ²μμ ν΅ν΄ μ΄ μ€λ₯μ λν΄ μ€λͺ νκ³ μ¬λλ€μ΄ 문ꡬμλ λΆκ΅¬νκ³ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€. @laurentmartelli κ°μ¬ν©λλ€!
+
1κ°
μ μκ²λ νΌλμ€λ¬μ μ΅λλ€. μ΄ ν λ‘ μ λν μΈν°λ· κ²μμ΄ μ€μ μμΈμ μ°Ύλ κ°μ₯ λΉ λ₯Έ λ°©λ²μ΄μκΈ° λλ¬Έμ λ©μμ§μ μ΄ ν λ‘ μ λν λ§ν¬κ° μμ μλ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
@laurentmartelli κ° μ΄ μ€λ₯μ λν΄ μ³μλ€κ³ μκ°νμ§ μμ μ μμ΅λλ€.
bind
νΈμΆ μ μ΄ μ€λ₯κ° λ°μν©λλ€.bind
νΈμΆμ μ£Όμ μ²λ¦¬νλ©΄ "No implementation for
...was bound
"κ° νμλ©λλ€.λ°μΈλ©μ΄ λ무 λ§μΌλ©΄ μ΄λ»κ² λ°μΈλ© νλλ₯Ό μ κ±°νκ³ μΆ©λΆνμ§ μμ μ μμ΅λκΉ?