首页 > 解决方案 > 在库项目中使用 Dagger 2

问题描述

我正在尝试使 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;
}}

我的应用组件:

@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 中的应用程序没有实例化,并且在应用程序和库中不可能有不同的应用程序,所以有什么技巧可以实现我的目的吗?谢谢

标签: androiddagger-2android-librarydagger

解决方案


推荐阅读