2017-05-22 103 views
0

我读过构造函数注入不需要模块。 所以我有这个问题。dagger2构造函数注入如何提供不依赖模块

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

    private Model realmModel; 
    
    @Inject 
    public MainActivityPresenter(Model realmModel) { 
        this.realmModel = realmModel; 
    } 
    

和这个组件:

@Singleton 
@Component(modules = {AppModule.class}) 
public interface AppComponent { 


    Model realmModel(); 
    void inject(MainActivity activity); 


} 

如果我的MainActivity我做:

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

如何将realmModel参数传递给演示者构造函数注入?

编辑:这是模型:

Presenter presenter; 

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

} 

感谢

+0

你在这里有一个循环依赖,你应该尝试摆脱它。您的模型取决于演示者,演示者取决于模型。因此,你将无法使用构造函数注入,因为如果没有先创建其他构造函数,就不能创建构造函数。你的模型是否真的需要保持对主持人的参考? –

+0

@DavidMedenjak不确定,我可以做一个回调来处理结果给主持人,但没有它,这是行得通的? – nani

回答

0

你有两个选择:

  1. 使用一个模块,具有提供方法
  2. 注释的构造函数Model@Inject,这样做的时候你通过realmModel在演示者构造函数中,将调用 构造函数。

我更喜欢使用模块,但这只是我的看法。

+0

我编辑了这个问题,它是正确的吗? – nani

+0

所以现在你需要提供一个Presenter ..与Model –

+0

相同的步骤Presenter是MainActivityPresenter实现的接口..它可以做到这一点? – nani

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 { 
} 

看看这些扭曲e视频的视频系列,这些是我第一个关于dagger2的视频教程。我发现它非常有帮助。希望它可以帮助你 https://www.youtube.com/watch?v=Qwk7ESmaCq0

相关问题