在图书馆项目中使用Dagger 2

时间:2018-07-25 15:45:23

标签: android dagger-2 android-library dagger

我正在尝试使Dagger 2在我的库中也可以使用Dagger 2在项目中使用。

由于该库必须是独立的,因此我尝试设置新的Dagger安装。

为此,我创建了一个AppController用于构建AppComponent:

public class AppController extends MultiDexApplication {

@NonNull
private AppComponent mAppComponent;

private static AppController sInstance;
private static int mStatusBarHeight = -1;

public static synchronized AppController getInstance() {
    return sInstance;
}

@Override
public void onCreate() {
    super.onCreate();
    sInstance = this;

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

}

/*** Dependency injection ***/
public ScoAppComponent getAppComponent() {
    return mAppComponent;
}}

我的AppComponent:

@Singleton
@Component(modules = {VariantSpecificModule.class})

public interface AppComponent {

    //Activities
    void inject(StartActivity StartActivity);

    void inject(Navigation navigation);

    void inject(MyFragment myFragment);

    void inject(BaseActivity baseActivity);
}

还有我的AppModule:

    @Module
public class AppModule {

    public static final String APP_NAME = "";

    private AppController mApplication;

    public AppModule(AppController application) {
        mApplication = application;
    }

    @Provides
    @Singleton
    AppController providesApplication() {
        return mApplication;
    }

    @Provides
    @Named("app_context")
    @Singleton
    Context providesApplicationContext(AppController app) {
        return app.getApplicationContext();
    }

    @Provides
    @Singleton
    EventBus providesEventBus() {
        return EventBus.getDefault();
    }

}

我还在库的AndroidManifest.xml中声明了AppController

<application
    android:name=".AppController"
    tools:replace="android:name">

但是我显然有一个问题:当我尝试注入BaseActivity时,我的控制器总是返回null ...

AppController.getInstance().getAppComponent().inject(this);

有人对如何处理图书馆项目中的匕首有想法吗?

编辑:看来库的AndroidManifest中的应用程序未实例化,并且在应用程序和库中不可能有其他应用程序,所以有没有技巧可以实现我的目的?谢谢

0 个答案:

没有答案