ダガー2
Github:https://github.com/google/dagger
使用:
シナリオ: MainActivity.java (ターゲット クラス) で、XXX (エンティティ クラス オブジェクト) のインスタンスを新規作成し、
このプロセスをオンラインでの製品の購入と比較すると仮定します。
1. エンティティ クラス (XXX.java) を作成します - 製品
//你的商品XXX
public class XXX {
public XXX() {}
}
2. モジュール(MainModule.java)の作成 – エクスプレスボックス
//创建一个(Main)你专属的快递盒,需要写上地址和放入商品
@Module
public class MainModule {
//需要在快递盒写上目标地址,即MainActivity,通过构造函数传进来
private MainActivity mainActivity;
public MainModule(MainActivity mainActivity){
this.mainActivity = mainActivity;
}
//提供一个商品XXX,把商品装进快递盒里
@Provides
public XXX provideXXX(){
return new XXX();
}
}
3. コンポーネント (MainComponent.interface) を作成します -- クーリエ
/**
* 创建一个(Main)你专属的快递员,把快递送到你手中
* 所以modules = MainModule.class声明要送的快递
**/
@Component(modules = MainModule.class)
public interface MainComponent {
/**
* 告诉快递员要将快递送往(inject)哪里
* @param mainActivity
*/
void inject(MainActivity mainActivity);
}
4. 対象クラス(MainActivity.java) -- I
public class MainActivity extends AppCompatActivity {
/**
* 声明我买的商品(需要的类实例)
*/
@Inject
XXX xxx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* DaggerMainComponent--当商品存在后自动生成这个商品的商家
* DaggerMainComponent.builder()--商家新建订单(返回DaggerMainComponent.Builder)
* mainModule(new MainModule(this))--在订单填写我的地址(MainActivity),地址也传到了快递盒上
* build()--订单生成,分派给一个快递员(MainComponent)
* inject(this)--告诉快递员送来(inject)我这里
*/
DaggerMainComponent.builder()
.mainModule(new MainModule(this))
.build()
.inject(this);
Toast.makeText(this, xxx.toString(), Toast.LENGTH_SHORT)
.show();
}
}
--------------
他のブロガーによるよく書かれた 2 つのチュートリアルを添付してください
最初の記事 - 使用: https://blog.csdn.net/mq2553299/article/details/73065745
2 番目の記事 - 原則: https://blog.csdn.net/mq2553299/article/details/73136396
DaggerMainComponent.builder() .mainModule(new MainModule(this)) .build() .inject(this);
原理を理解するために一度ソースコードを追跡することをお勧めします