support binding of generic interfaces from SpringModule

This commit is contained in:
Taylor Wicksell
2017-05-24 14:51:58 -07:00
committed by Dave Syer
parent 9dae979d39
commit 061aef36f2
9 changed files with 68 additions and 31 deletions

View File

@@ -11,6 +11,7 @@ import org.junit.Test;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
import com.google.inject.name.Names;
public abstract class AbstractCompleteWiringTests {
@@ -74,6 +75,12 @@ public abstract class AbstractCompleteWiringTests {
public void getNamedInjectedInstance() {
assertNotNull(this.injector.getInstance(Thing.class).thang);
}
@Test
public void getParameterizedType() {
Parameterized<String> instance = this.injector.getInstance(Key.get(new TypeLiteral<Parameterized<String>>() {}));
assertNotNull(instance);
}
public interface Service {
}
@@ -121,4 +128,7 @@ public abstract class AbstractCompleteWiringTests {
public static class Thang {
}
public static interface Parameterized<T> {
}
}

View File

@@ -18,6 +18,7 @@ import javax.inject.Singleton;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.TypeLiteral;
import com.google.inject.name.Names;
/**
@@ -38,6 +39,7 @@ public class GuiceWiringTests extends AbstractCompleteWiringTests {
bind(Service.class).to(MyService.class);
bind(Baz.class).in(Singleton.class);
bind(Thang.class).annotatedWith(Names.named("thing")).to(Thang.class);
bind(new TypeLiteral<Parameterized<String>>(){}).toInstance(new Parameterized<String>(){});
}
}

View File

@@ -80,6 +80,11 @@ public class ModuleBeanWiringTests extends AbstractCompleteWiringTests {
public Baz baz(Service service) {
return new Baz(service);
}
@Bean
public Parameterized<String> parameterizedBean() {
return new Parameterized<String>() {};
}
}
protected static class Spam {

View File

@@ -86,6 +86,11 @@ public class ModuleNamedBeanWiringTests extends AbstractCompleteWiringTests {
public Baz baz(Service service) {
return new Baz(service);
}
@Bean
public Parameterized<String> parameterizedBean() {
return new Parameterized<String>() {};
}
}
protected static class Spam {

View File

@@ -48,6 +48,10 @@ public class SpringWiringTests extends AbstractCompleteWiringTests {
public Thang other() {
return new Thang();
}
@Bean
public Parameterized<String> parameterizedBean() {
return new Parameterized<String>() {};
}
}
}

View File

@@ -61,7 +61,10 @@ public class SpringModuleWiringTests extends AbstractCompleteWiringTests {
public Thing that() {
return new Thing();
}
@Bean
public Parameterized<String> parameterizedBean() {
return new Parameterized<String>(){};
}
}
}