https://developer.android.com/topic/libraries/architecture/
在Android架构蓝图中,为什么dagger是基于mvp架构而不是MVVM架构?是不是因为不适合MVVM架构?还是其他原因?
https://developer.android.com/topic/libraries/architecture/
在Android架构蓝图中,为什么dagger是基于mvp架构而不是MVVM架构?是不是因为不适合MVVM架构?还是其他原因?
Dagger 适用于任何架构,因为它不是依赖于架构的组件。这是一个依赖注入库。我不知道为什么蓝图示例不包含MVVM-Dagger
实现。
MVVM
这是 dagger 与架构的一些示例用法。
这是一个Module
提供ViewModel
和其他几个对象。
@Module(includes = {
RecyclerViewModule.class,
ActivityModule.class
})
class MainActivityModule {
private final MenuAdapter.Callback menuAdapterCallback;
MainActivityModule(MenuAdapter.Callback menuAdapterCallback) {
this.menuAdapterCallback = menuAdapterCallback;
}
@Provides
MainActivityViewModel provideMainActivityViewModel(
FragmentActivity fragmentActivity,
MainActivityViewModelFactory factory
) {
return ViewModelProviders.of(fragmentActivity, factory)
.get(MainActivityViewModel.class);
}
@Provides
MenuAdapter.Callback provideMenuAdapterCallback() {
return menuAdapterCallback;
}
@Provides
MainActivityViewModelFactory provideViewModelFactory(MenuAdapter menuAdapter) {
return new MainActivityViewModelFactory(menuAdapter);
}
}
和相应的组件
@Component(modules = MainActivityModule.class)
public interface MainActivityComponent {
void inject(MainActivity mainActivity);
}
和组件的注入。
public class MainActivity extends BaseAppCompatActivity implements MenuAdapter.Callback {
@Inject
MainActivityViewModel viewModel;
@Inject
DividerItemDecoration divider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DaggerMainActivityComponent.builder()
.activityModule(new ActivityModule(this))
.mainActivityModule(new MainActivityModule(this))
.build()
.inject(this);
binding.include.rvMenu.addItemDecoration(divider);
binding.setViewModel(viewModel);
}
}
您可以从这里获得完整的项目。这是一个简单的 MVVM + Dagger2 + Retrofit + RxJava + DataBinding
项目示例。随意克隆/下载以运行项目。