上一篇寫了dagger2的無參依賴注入代碼,那么該篇就是有參依賴注入代碼了
這次場景很簡單谎僻,單純在一個(gè)Activity構(gòu)造并且使用一個(gè)實(shí)體類,參數(shù)由Activity傳遞
1. 依然使用 @Inject 標(biāo)記
public class MainEntity {
@Inject
public MainEntity(String name) {
this.name = name;
}
}
不過這次的構(gòu)造函數(shù)有點(diǎn)不一樣寓辱,我們需要傳遞一個(gè)name
2. 使用@Module 和 @Provides
@Module
public class MainModule {
String name;
public MainModule(String name) {
this.name = name;
}
@Provides
MainEntity provideMainParameter() {
return new MainEntity(name);
}
}
- 使用
@Module
標(biāo)注類艘绍,表示它為工廠 - 在類中使用
@Provides
標(biāo)注方法,表示它為工廠提供實(shí)例的方法秫筏。
在該方法中對實(shí)例進(jìn)行初始化并返回該實(shí)例诱鞠。
3. 創(chuàng)建中介類,使用@Component
@Component(modules = {MainModule.class})
public interface MainComponent {
/**
* 該方法名隨意起这敬,不管起什么航夺,起多少個(gè),最終生成的代碼都是參數(shù)跟注入的MainModel結(jié)合
* 當(dāng)然崔涂,只能放置一個(gè)參數(shù)阳掐,如果加入多個(gè)參數(shù)會(huì)運(yùn)行編譯報(bào)錯(cuò)
*/
void inject(MainActivity activity);
}
上一篇已經(jīng)具體介紹@Component,唯一區(qū)別是因?yàn)橛玫搅薓odule冷蚂,所以要給個(gè)額外標(biāo)記
4. 在Activity使用實(shí)體類
public class MainActivity extends AppCompatActivity {
@Inject
MainEntity mainEntity;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerMainComponent.builder().mainModule(new MainModule("參數(shù)")).build().inject(this);
((TextView) findViewById(R.id.tvName)).append("_" + mainEntity.getName());
}
}
那么這邊已經(jīng)介紹完畢有參的依賴注入了缭保,我們主要還是深入了解Hilt,因?yàn)镠ilt是google簡化dagger的代碼而產(chǎn)生的新的依賴注入庫蝙茶。所以dagger暫時(shí)結(jié)束了艺骂!
只是簡單介紹依賴注入使用方式的實(shí)例源碼如下:
zhongjhATC/HiltAndDaggerDemo: 演示 Hilt、Dagger 的demo (github.com)
其他相關(guān)文章
1. 【淺入深出理解 dagger隆夯、Hilt】 - 簡介 - 簡書 (jianshu.com)
2. 【淺入深出理解 dagger彻亲、Hilt】 - dagger無參依賴注入 - 簡書 (jianshu.com)
3. 【淺入深出理解 dagger孕锄、Hilt】 - dagger有參依賴注入 - 簡書 (jianshu.com)
4. 【淺入深出理解 dagger、Hilt】 - Hilt - 簡書 (jianshu.com)