史上最適合新手的Dagger2教程(四)帶參注入

Dagger2系列教程目錄:

史上最適合新手的Dagger2教程(一)基本注入

史上最適合新手的Dagger2教程(二)對(duì)象注入

史上最適合新手的Dagger2教程(三)模型與單例

史上最適合新手的Dagger2教程(四)帶參注入

史上最適合新手的Dagger2教程(五)命名、限定與延時(shí)加載

前面我們講解了構(gòu)造方法中不帶參數(shù)的各種注入方式,

這節(jié)課,我們來學(xué)習(xí)構(gòu)造方法中帶參數(shù)的對(duì)象如何使用Dagger2注入。

· 常規(guī)實(shí)現(xiàn)

我們先不使用Dagger2,以常規(guī)的方式注入一個(gè)帶參構(gòu)造的對(duì)象:

帶參構(gòu)造類:

public class SellMoe {

    private int age;

    public SellMoe(int age) {
        this.age = age;
    }
     public String sellMoe() {
        return "我特么" + age + "歲了還是可愛得要死";
    }
}

常規(guī)調(diào)用:

public class MainActivity extends AppCompatActivity {
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = findViewById(R.id.textView);
        
        SellMoe sellMoe = new SellMoe(80);

        textView.setText(sellMoe.sellMoe());
    }
}

運(yùn)行結(jié)果:

接下來我們使用Dagger2來注入它。

· Dagger2注入

下面所用到的注解,在上節(jié)課有詳細(xì)的說明,如果不熟練請(qǐng)回顧上一節(jié)。

Step1:創(chuàng)建帶參構(gòu)造模型(@Module)

對(duì)于帶參構(gòu)造的對(duì)象,必須使用@Module注入;并且這個(gè)模型必須有一個(gè)帶參的構(gòu)造方法。

@Module
public class SellMoeModule {
    private int age;
    public SellMoeModule(int age) {
        this.age = age;
    }
}

Step2:創(chuàng)建帶參提供者(@Provides)

除了提供帶參的對(duì)象的提供者以外,還要有提供參數(shù)的提供者,二者缺一不可

@Module
public class SellMoeModule {
    private int age;
     public SellMoeModule(int age) {
        this.age = age;
    }
     //提供參數(shù)的提供者
    @Provides
    public int ageProvider() {
        return age;
    }
     //提供對(duì)象的提供者
    @Provides
    public SellMoe sellMoeProvider(int age) {
        return new SellMoe(age);
    } 
}

傳參的事情交給提供者來完成。

Step3:創(chuàng)建注入器(@Component)

帶參的注入器必須指定使用的模型:

//指定模型
@Component(modules = SellMoeModule.class)
public interface SellMoeComponent {
    void inject(MainActivity mainActivity);
}

Step4:構(gòu)建項(xiàng)目,生成注入器

反正養(yǎng)成習(xí)慣寫完注入器就Build一次就對(duì)了!

Step5:注入對(duì)象

使用帶參模型注入的時(shí)候,就不能直接使用create()方法了,

和需要更改OkHttp3的參數(shù)時(shí),需要使用OkHttpClient.Builder()一個(gè)道理,

這里也要使用Builder()傳入帶參的Module:

public class MainActivity extends AppCompatActivity {
     @Inject
    SellMoe sellMoe;
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = findViewById(R.id.textView);

        DaggerSellMoeComponent.builder().sellMoeModule(new SellMoeModule(80)).build().inject(this);

        textView.setText(sellMoe.sellMoe());
    }
}

以上就是帶參對(duì)象的注入過程。

但是話又說回來,有時(shí)候一個(gè)對(duì)象,有帶參和不帶參兩個(gè)構(gòu)建方法,這個(gè)時(shí)候怎么辦嘞?

下節(jié)課再講!

· 家庭作業(yè)

用Dagger2注入一個(gè)帶參數(shù)的杠精類,分別使用普通模式和單例模式:

public class GangJing {
    private int age;
    public GangJing(int age) {
        this.age = age;
    }
     public String gang() {
        return "我特么" + age + "歲了抬起杠來依然是個(gè)扛把子";
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容