【问题标题】:Is it possible to get beans by class type in Dagger2 similarly to Spring does?是否可以像 Spring 一样在 Dagger2 中按类类型获取 bean?
【发布时间】:2020-06-02 10:39:12
【问题描述】:

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

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

有没有什么方法可以用 Dagger2 实现类似的功能?

【问题讨论】:

    标签: java spring dependency-injection dagger-2


    【解决方案1】:

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

    @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();
    }
    

    【讨论】:

    • 那是我的第一种方法,但是多重绑定迫使我创建一个上层来手动生成那些具有我需要的依赖关系的地图。这个想法是通过反射从 Dagger 图中提取依赖关系。无论如何,谢谢你的回答,我很感激
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2014-02-21
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多