如何为 Dagger 2 创建模块

How to create module for dagger 2

我读过很多关于 dagger 2 的文章,但我不明白如何为 dagger 2 创建模块 假设我有三个 class A、B、C A依赖于B和C 我如何创建模块和组件

组件:

@Singleton
@Component(modules = {
        ApplicationModule.class
})
public interface ApplicationComponent {

    void inject(@NonNull A a);
}

模块:

@Module
public class ApplicationModule {
    @NonNull
    private final Application application;

    public ApplicationModule(@NonNull Application application) {
        this.application = application;
    }

    @Provides
    @NonNull
    @Singleton
    Application provideApp() {
        return application;
    }

    @Provides
    @NonNull
    @Singleton
    B provideB() {
        return new B();
    }

    @Provides
    @NonNull
    @Singleton
    C provideC() {
        return new C();
    }
}

您的应用程序 class,您在其中使用模块初始化组件:

public class App extends Application {
    private ApplicationComponent applicationComponent;

    @NonNull
    public static App get(@NonNull Context context) {
        return (App) context.getApplicationContext();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        applicationComponent = prepareApplicationComponent().build();
    }

    @NonNull
    protected DaggerApplicationComponent.Builder prepareApplicationComponent() {
        return DaggerApplicationComponent.builder()
                .applicationModule(new ApplicationModule(this));
    }

    @NonNull
    public ApplicationComponent applicationComponent() {
        return applicationComponent;
    }
}

您的 A class(例如 activity):

public class A extends AppCompatActivity {
    @Inject
    B b;
    @Inject
    C c;

    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        injectDependencies()
        setContentView(R.layout.activity_main);
        // working with b and c
    }

    private void injectDependencies() {
        App.get(this).applicationComponent().inject(this);
    }
}