Меня очень смущает вопрос о кинжале 2. Существует множество способов, которыми люди предлагают решение. Как я могу ввести свое приложение для предоставления своей базы данных?
У меня уже есть модуль базы данных, модуль приложения, обеспечивающий мое приложение. Мой компонент приложения с компоновщиком внутри (понятия не имею, что он делает). С этим компоновщиком невозможно построить его внутри моего класса приложения!?
Класс приложения:
public class OnSiteApplication extends Application implements HasActivityInjector {
@Inject
DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public AndroidInjector<Activity> activityInjector() {
return dispatchingAndroidInjector;
}
}
AppComponent:
@Singleton
@Component(modules = {ApplicationModule.class, AndroidInjectionModule.class})
public interface AppComponent extends AndroidInjector<OnSiteApplication> {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
void inject(OnSiteApplication onSiteApplication);
}
Модуль приложения:
@Module(includes = DatabaseModule.class)
public class ApplicationModule {
private static final String SHARED_PREFERENCE_NAME = "OnSitePreferences";
private final OnSiteApplication application;
public ApplicationModule(OnSiteApplication appContext) {
this.application = appContext;
}
@Provides
public OnSiteApplication provideOnSiteApplication() {
return application;
}
}
Модуль базы данных:
@Module
public class DatabaseModule {
@Provides
public static OnSiteDatabase provideDatabase(Application appContext) {
return Room.databaseBuilder(appContext,
OnSiteDatabase.class, OnSiteDatabase.DATABASE_NAME)
.fallbackToDestructiveMigration()
.build();
}
@Provides
public static ProjectDao provideProjectAccess(OnSiteDatabase onSiteDatabase) {
return onSiteDatabase.projectDao();
}
}
Большинство решений - один год или старше. Каков самый современный способ внедрения классов на основе ОС, таких как Application?