代码之家  ›  专栏  ›  技术社区  ›  AlexTa

在Dagger2中可以像Spring那样按类类型获取bean吗?

  •  1
  • AlexTa  · 技术社区  · 5 年前

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

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

    有没有办法用匕首2达到类似的效果?

    0 回复  |  直到 5 年前
        1
  •  0
  •   EpicPandaForce Jigar Joshi    5 年前

    据我所知,只有在类上手动定义一个map multibinding作为一个map key时。

    @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();
    }
    
    推荐文章