小编Den*_*tez的帖子

Dagger with Android:如何在使用MVP时注入上下文?

在开发Android应用程序时,我偶然发现了一个问题.我刚刚开始使用Dagger,所以我知道一些基本概念,但是当在教程范围之外使用它时,它们的用例变得不那么清楚了.

所以要明白这一点.在我的应用程序中,我正在使用MVP,如本博客文章中所述:http://antonioleiva.com/mvp-android/

所以起初我将Interactor类(处理数据的类)注入Presenter类,一切正常.但后来我实现了使用SQLite数据库的方法,所以现在需要在我的Interactor类中使用Context.

我无法弄清楚我该如何正确地做到这一点?我的临时修复是将Dagger从我的应用程序中排除,并在创建Presenter类时在构造函数中传递Context变量,然后在presenter中传递Interactor类,但我想使用Dagger.

所以我目前的应用看起来有点像这样.

MyActivity implements MyView {     
      MyPresenter p = new MyPresenter(this, getApplicationContext());
}
Run Code Online (Sandbox Code Playgroud)

MyPresenter中的构造函数

MyPresenter(MyView view, Context context) {
      this.view = view;
      MyInteractor i = new MyInteractor(context);
}
Run Code Online (Sandbox Code Playgroud)

在构造函数中MyInteractor我分配Context给一个私有变量.

我只需要注入MyInteractor来MyPresenter,因为这是应用程序,需要针对不同的实现进行测试的一部分.但是,如果它也将是可以注入MyPresenter到MyActivity,那将是巨大的:)

我希望有人对我想要实现的目标有一些经验:)

java mvp android dagger

9
推荐指数
1
解决办法
5623
查看次数

如何正确解决警告 CS1998:此异步方法缺少“等待”(不压制它)?

我在我的应用程序中收到很多 CS1998 警告,我正在寻找如何在我的情况下解决它们。

例如,我有一个 IDataService 接口,它有一个方法签名Task<DataModel> GetData()。

然后我可以说一个实现对RealDataService : IDataService文件进行一些写入/读取,并且由于它使用异步 I/O 方法来调用它们await并且方法签名更改为async Task<DataModel> GetData().

然后使用var data = await _dataService.GetData();. 到目前为止,一切都很好。

但后来我需要测试我的数据,我创建了数据接口的另一个实现,MockupDataService : IDataService其中数据只是硬编码并且不执行异步操作。一切仍然正常运行,但是在构建应用程序时,那些讨厌的 CS1998 警告开始出现。

这个问题网上有很多解决方法:

  • 禁用此类警告
  • 使用调用 await Task.Yeild();
  • 使用 Task.From 结果 -> return await Task.FromResult<DataModel>(new DataModel());
  • 我想我看过更多,但现在想不起来了。

但是这些解决方案都没有比其他解决方案“更正确”,所以我想知道解决这个问题的正确方法是什么?我知道很多人对 C# 中的异步编程有更深入的了解,并且能够就这个问题提供一些见解/答案。

c# asynchronous visual-studio async-await xamarin.forms

0
推荐指数
2
解决办法
1207
查看次数