Spring框架允许通过以下方式按类类型获取bean:
ApplicationContext context;
Class<? extends Foo> fooClass;
Foo fooBean = context.getBean(fooClass);
使用Dagger2是否有任何方法可以实现类似目的?
据我所知,仅当您手动将针对该类的映射多重绑定定义为映射键时。
@Singleton
public class MyClass {
@Inject
public MyClass() {}
}
@Module
public abstract class MyModule {
@Binds
@IntoMap
@ClassKey(MyClass.class)
public abstract Object bindMyClass(MyClass impl);
}
然后
@Inject
Map<Class<?>, Provider<Object>> providers;
MyClass myClass = (MyClass)providers.get(MyClass.class).get();
可以使用自定义键将键限制为? extends MyClass
。
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@MapKey
@interface FooKey {
Class<? extends Foo> value();
}