Кинжал подходит для любой архитектуры, потому что это не архитектурно-зависимый компонент.Это библиотека внедрения зависимостей.Я не знаю, почему образец проекта не включает MVVM-Dagger
реализацию.
Вот пример использования кинжала с архитектурой MVVM
.
Вот 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
.Не стесняйтесь клонировать / загружать для запуска проекта.