У меня следующая ситуация:
Модуль приложения с классом приложения
public class MainApplication extends CoreApplication implements HasActivityInjector {
@Inject
Logger logger;
@Inject
DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
DaggerAppComponent.builder().application(this).build().inject(this);
logger.log();
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return dispatchingAndroidInjector;
}
}
И CoreApplication определено в другом модуле библиотеки
public class CoreApplication extends Application {
@Inject
Logger logger;
@Override
public void onCreate() {
super.onCreate();
logger.log();
}
}
Здесь AppComponent.java:
@Singleton
@Component(modules = { AndroidInjectionModule.class,
ApplicationModule.class})
public interface AppComponent extends AndroidInjector<MainApplication> {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
Logger предоставляется в модуле приложения в следующем классе
@Module(includes = CoreModule.class)
public abstract class ApplicationModule {
@Provides
@Singleton
static Logger provideLog() {
return new Logger();
}
}
Вместо этого в модуле библиотеки определен CoreModule.java:
@Module
public abstract class CoreModule {
public static final String LOG_TAG = "logTag";
@ContributesAndroidInjector
abstract DetailActivity contributeActivityInjector();
}
Проблема в том, что я не могу ввести Logger в CoreApplication (я получаю NPE), но я могу сделать это в MainApplication.
Я могу внедрить его без проблем также в действия основной библиотеки, как это:
public class DetailActivity extends AppCompatActivity {
@Inject
Logger logger;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
AndroidInjection.inject(this);
logger.log();
}
}