小编qaz*_*sab的帖子

Dagger 2问题覆盖单一提供了应用程序使用的库中的模块的注释方法

GitHub项目链接

在GitHub上做了一个项目,它是我项目实际架构的匕首2架构的模型.这个问题将基于GitHub项目.

我在这个问题中提供了很多代码片段,但是,在Android Studio中自己编译项目以理解问题可能更容易.

如果你检查代码,它将无法编译.进入AppModule.java并注释掉两个提供方法,它应该编译.

主要问题是这篇文章的最后一行.

https://github.com/qazimusab/Dagger2LibraryProject

建筑

我有一个库,其中包含制作应用程序所需的所有代码.这个架构的重点是我在项目中创建的每个应用程序都应该能够使用库,并且通过dagger 2,能够为它自己的模块中的任何单个类或活动提供不同的实现.此时,我在此示例项目中只有一个使用该库的应用程序.

问题

使用dagger,我有相同的体系结构,在app特定的模块(而不是库模块)中,我能够添加一个新的提供注释方法来覆盖任何库模块中提供的任何实现只要

  1. 该方法位于app模块的模块中
  2. 该方法使用@Provides注释
  3. 该方法具有与要覆盖的方法相同的返回类型

使用Dagger 2时,架构可以在我不覆盖任何提供时工作,或者如果我这样做,当我覆盖该模块中的每个提供并从特定于应用程序模块的包中删除该模块时.

例如,在我的项目中,我有一个应用程序和一个库.

该应用程序有一个AppModule; 图书馆有一个CatModule提供Cat和CatFood,一个狗模块提供Dog and DogFood,以及一个LibraryModule提供活动.

CatModule.java

package com.example.qaziahmed.library.application.modules;

import com.example.qaziahmed.library.classes.Cat; import
com.example.qaziahmed.library.classes.CatFood; import
com.example.qaziahmed.library.classes.contract.ICat; import
com.example.qaziahmed.library.classes.contract.ICatFood;

import javax.inject.Singleton;

import dagger.Module; import dagger.Provides;

/**  * Created by qaziahmed on 11/23/15.  */ @Module public class
CatModule {

    @Provides
    @Singleton
    ICat provideCat() {
        return new Cat();
    }

    @Provides
    ICatFood provideCatFood(){
        return new CatFood();
    } }
Run Code Online (Sandbox Code Playgroud)

DogModule.java

package com.example.qaziahmed.library.application.modules;

import com.example.qaziahmed.library.classes.Dog; import
com.example.qaziahmed.library.classes.DogFood; …
Run Code Online (Sandbox Code Playgroud)

java android dependency-injection dagger dagger-2

14
推荐指数
2
解决办法
8138
查看次数

标签 统计

android ×1

dagger ×1

dagger-2 ×1

dependency-injection ×1

java ×1