我正在尝试使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中的应用程序未实例化,并且在应用程序和库中不可能有其他应用程序,所以有没有技巧可以实现我的目的?谢谢