是否有可能像Spring一样按Dagger2中的类类型获取bean?

问题描述 投票:2回答:1

Spring框架允许通过以下方式按类类型获取bean:

ApplicationContext context;
Class<? extends Foo> fooClass;
Foo fooBean = context.getBean(fooClass);

使用Dagger2是否有任何方法可以实现类似目的?

java spring dependency-injection dagger-2
1个回答
0
投票

据我所知,仅当您手动将针对该类的映射多重绑定定义为映射键时。

@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();
}
© www.soinside.com 2019 - 2024. All rights reserved.