2017-07-20 37 views
1

在viewmodel類中,我已經看到示例代碼,其中構造函數以存儲庫作爲參數。像這樣:Android體系結構組件:如何插入存儲庫參數

public SampleViewModel(SampleRepository sampleRepository){ ... }

但在活動中,您使用此行來創建一個視圖模型類ViewModelProviders.of(this).get(SampleViewModel.class)。您如何將存儲庫作爲參數傳遞給視圖模型?我也遇到過提到「依賴注入」。作爲一名經驗豐富的程序員,如果DI與我的問題有關,任何人都可以提出建議嗎?

+0

什麼'SampleRepository'你的意思是?你可以指向任何代碼? – pskink

+0

是的,我正在關注android開發人員網站https://developer.android.com/topic/libraries/architecture/guide.html上的示例代碼片段。在「連接ViewModel和存儲庫」標題下,UserProfileViewModel構造函數使用@Inject注入存儲庫?但是在哪裏存儲庫實際上被構建並傳入? –

回答

2

當你得到你的viewmodel時,你必須提供一個ViewModelProvider.Factory。

ViewModelProviders.of(this, new SampleViewModelFactory(sampleRepo)).get(SampleViewModel.class) 

這裏有一個例子:

class SampleViewModelFactory implements ViewModelProvider.Factory { 

    private final SampleRepository repo; 

    @Inject 
    public SampleViewModelFactory(SampleRepository repo) { 
     this.repo = repo; 
    } 

    @Override 
    public SampleViewModel create(Class modelClass) { 
     return new SampleViewModel(repo); 
    } 
}