1

https://developer.android.com/topic/libraries/architecture/

在Android架构蓝图中,为什么dagger是基于mvp架构而不是MVVM架构?是不是因为不适合MVVM架构?还是其他原因?

4

1 回答 1

0

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项目示例。随意克隆/下载以运行项目。

于 2018-12-31T10:04:24.597 回答