dagger2記錄篇

来源:http://www.cnblogs.com/LiuZhen/archive/2016/09/30/5923387.html
-Advertisement-
Play Games

作為一個碼農,什麼都不用多講,貼代碼 build project build module Application public class App extends Application { private AppComponent appComponent; @Override public v ...


作為一個碼農,什麼都不用多講,貼代碼

build project

build module

Application

public class App extends Application {

    private AppComponent appComponent;

    @Override public void onCreate() {
        super.onCreate();

        appComponent= DaggerAppComponent.builder()
                .appModule(new AppModule(this))
                .build();
    }

    public AppComponent getAppComponent() {
        return appComponent;
    }

}
View Code
AppComponent
@Singleton
@Component(modules = { AppModule.class })
public interface AppComponent {

    @ContextLife("Application")
    App getApplication();

    RetrofitHelper retrofitHelper();  //提供http的幫助類

}
View Code
AppModule
@Module
public class AppModule {
    private App application;

    public AppModule(App application){
        this.application=application;
    }

    @Provides
    @Singleton
    @ContextLife("Application")
    public App provideApplication(){
        return application;
    }


    @Provides
    @Singleton
    public RetrofitHelper provideRetrofitHelper() {
        return new RetrofitHelper();
    }

}
View Code
ActivityComponent
@ActivityScope
@Component(dependencies = AppComponent.class, modules = ActivityModule.class)//關聯上下
public interface ActivityComponent {

    Activity getActivity();

    void inject(LoginActivity loginActivity);//要在類中使用註入功能
    void inject(MainActivity mainActivity);

}
View Code
ActivityModule
@Module
public class ActivityModule {


    private Activity mActivity;

    public ActivityModule(Activity activity) {
        this.mActivity = activity;
    }

    @Provides
    @ActivityScope
    public Activity provideActivity() {
        return mActivity;
    }

    @Provides
    @ActivityScope
    public IPresenterFactory providePresenter(RetrofitHelper retrofitHelper) {
        return new PresenterFactory(retrofitHelper);
    }

}
View Code

Base裡面使用註入,否則無法註入

public abstract class PresenterActivity extends BaseActivity {

    private final static String TAG = "PresenterActivity";

    protected abstract void initInject();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initInject();
    }

    protected ActivityComponent getActivityComponent(){
        return  DaggerActivityComponent.builder()
                .appComponent(App.getInstance().getAppComponent())
                .activityModule(getActivityModule())
                .build();
    }

    private ActivityModule getActivityModule() {
        return new ActivityModule(this);
    }

}
View Code

此時前提條件都有了

點擊運行自動生成註入代碼(沒問題的前提)

使用註入:

public class MainActivity extends PresenterActivity {

    @Inject
    protected IPresenterFactory mPresenter;//沒有創建對象,inject標簽註入類型

    private final int BASIC_PERMISSION_REQUEST_CODE = 100;
    private TextView username;

    @Override
    public void findView() {
        username = findView(R.id.username);
        username.setText(App.getInstance().getUserEntity().getName()+" hello");
    }

    @Override
    public void init() {
        if (mPresenter != null){
            Toasts.showShort("mPresenter success",context);//註入成功會列印出success
        }
    }

    @Override
    public int layoutResID() {
        return R.layout.activity_main;
    }

    @Override
    protected void initInject() {
        getActivityComponent().inject(this);
    }


    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent() {
        Toasts.showShort("刷新UI",context);
    }

}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上代碼: counter-reset 屬性設置某個選擇器出現次數的計數器的值。預設為 0。 counter-increment 屬性設置某個選取器每次出現的計數器增量。預設增量是 1。 counter()插入計數器 ...
  • ...
  • Ext.window.MessageBox是一個工具類,他繼承自Ext.window.Windoe對象,用來生成各種風格的信息提示對話框,其實例對象可以通過Ext.MessageBox或Ext.Msg進行訪問,使用Ext.MessageBox和使用Ext.Msg有相同的效果,而後者提供了更簡短的調用 ...
  • GCD即為Grand Central Dispatch的縮寫,是一種主要用於非同步處理任務的安全的高性能解決方案。 在此不對比其他非同步處理技術,只記錄GCD的使用及說明。 先記錄一些必要的概念:線程,同步,非同步,並行隊列,串列隊列 線程:程式中任務執行流的最小單元。一個應用程式,一般存在一個進程(擁有 ...
  • GPUIMAGE中GPUImageStillCamera可以調用系統相機,並實現實時濾鏡,但是我沒有找到相機全屏的方法,望知道的說一下 GPUImageStillCamera繼承自GPUImageVideoCamera類,添加了捕獲照片的功能。 GPUImageVideoCamera 初始化方法: ...
  • 本文實現全自定義控制項--自定義開關 本文地址:http://www.cnblogs.com/wuyudong/p/5922316.html,轉載請註明源地址。 自定義開關 (View),本文完成下麵內容 1. 寫個類繼承View2. 拷貝包含包名的全路徑到xml中3. 界面中找到該控制項, 設置初始信 ...
  • Android Studio增量升級什麼情況下使用最合適呢? 比如現在的as版本是2.2版本,而你的as版本2.0版本,這個時候點Check For Updates就沒有反應了,因為你已經2個有版本沒升級了(版本跨度太大 ),所以這樣就不能線上升級了。 重要的信息 谷歌更新地址:https://dl ...
  • 最近在看推送方面的知識,用的是信鴿推送主要是因為後臺用的是信鴿 推送用第三方推送,也就是在客戶端建一個廣播接收器,當伺服器發送消息時發送到信鴿,信鴿再發送一次,廣播接受器接受下; 我實現的功能比較簡單,當app在運行狀態時,會在主頁展示一個彈窗展示推送的消息;如果app不在運行狀態且service沒 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...