android - 这真的是用匕首 2 注入东西的最佳形式吗?或者为什么匕首是一个不错的选择?
问题描述
我正在尝试使用 Dagger 2,在很多示例中我看到了这样的代码:
我的组件.java
@Singleton
@Component(modules = {SharedPrefModule.class})
public interface MyComponent {
void inject(MainActivity activity);
}
SharedPrefModule.java
@Module
public class SharedPrefModule {
private Context context;
public SharedPrefModule(Context context) {
this.context = context;
}
@Singleton
@Provides
public Context provideContext() {
return context;
}
@Singleton
@Provides
public SharedPreferences provideSharedPreferences(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context);
}
}
MainActivity.java
@Inject
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
myComponent = DaggerMyComponent.builder().sharedPrefModule(new SharedPrefModule(this)).build();
myComponent.inject(this);
}
我的疑问是如果我真的要注入,我需要放这个吗?:
DaggerMyComponent.builder().sharedPrefModule(new SharedPrefModule(this)).build();
如果我想在其他类中注入,我是否需要在 中放置另一个方法,MyComponent
例如,我想注入Do I need to put too?SharedPreferences
MainViewModel
void inject(MainViewModel mainViewModel);
如果答案是肯定的,那么这样做的真正优势是什么?仅应用单例模式有什么区别?还是直接注射使用myComponent = new SharedPreferences(this);
?
解决方案
推荐阅读
- macos - macOS 终端中是否有可以递归搜索当前目录(包括子目录)下所有文件中的字符串的命令?
- python - 接收时间过长如何关闭会话?
- php - 匹配带有 1 个或多个尾随子字符串的字符串
- javascript - 在 Google Sheets Apps Script 中,如何检查工作表是否存在以及是否不添加工作表
- iis - IIS备份物理路径
- asp.net-mvc - 我们应该如何在 MVC 中创建登录页面?
- java - 类型不匹配:无法从 List 转换
列出 - java - 如何使用 android 在 Firebase 数据库中获取子值?
- vb.net - 在 IDE 中的对话框 (msgbox()) 命令处暂停代码
- python - 使用 django 和 rest framweork 的错误 url