dagger2构造函数注入如何在没有模块的情况下提供依赖

时间:2017-05-22 15:25:02

标签: android dependency-injection dagger-2 android-mvp

我读过构造函数注射不需要模块。 所以我有这个问题。

  1. 如果我有这个构造函数注入:

    private Model realmModel;
    
    @Inject
    public MainActivityPresenter(Model realmModel) {
        this.realmModel = realmModel;
    }
    
  2. 和这个组件:

    @Singleton
    @Component(modules = {AppModule.class})
    public interface AppComponent {
    
    
        Model realmModel();
        void inject(MainActivity activity);
    
    
    }
    

    如果在我的MainActivity中,我会这样做:

    ((MyApp)getApplication()).createAppComponent().inject(this);
    

    如何将realmModel参数传递给presenter构造函数注入?

    编辑:这是型号:

     Presenter presenter;
    
     @Inject
     public RealmModel(Presenter presenter) {
        this.presenter = presenter;
    
    }
    

    谢谢

2 个答案:

答案 0 :(得分:1)

解决此问题的三种方法

1)给出一个提供Relam模型的模块

 @Provides
 @Singleton
 public Model providesRealmModel() {
     return new Model();
 }

2)使你的RelamModel类也注入构造函数

class Model {
   @Inject
   public Model() {}
} 

构造注入中的诡计是它的所有依赖项也应该是构造函数,然后才能正常工作。 (根据经验,您的模型需要应用程序上下文。请查看3选项以了解实现外部依赖关系的方法

3)提供模型作为外部依赖。

 @Module
 public class ModelModule {
    private Model relamModel;
    public ModelModule(Model relamModel) {
       this.relamModel = relamModel
    }
 }

@Component(module={ModelModule.class}) 
public interface ApplicationComponent {
}

看看来自扭曲的电影的一系列视频,这些是我在dagger2上的第一个视频教程。我觉得它真有帮助。希望它也能帮到你 https://www.youtube.com/watch?v=Qwk7ESmaCq0

答案 1 :(得分:0)

您有两种选择:

  1. 使用带有提供方法的模块
  2. 使用Model注释@Inject的构造函数,在presenter构造函数中传递realmModel时执行此操作 构造函数将被调用。
  3. 我更喜欢使用模块,但这只是我的意见。