如何使用参数构造函数将子组件添加到模块中?
除了提供github链接外,在此处添加代码:
ExampleApplication.java
public class ExampleApplication extends DaggerApplication {
@Inject
Database database;
@Override
public void onCreate() {
super.onCreate();
Timber.plant(new Timber.DebugTree());
Timber.i(database.name());
}
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerApplicationComponent
.builder()
.application(this)
.build();
}
}
ApplicationComponent.java
@ApplicationScope
@Component(modules = {
ApplicationModule.class,
AndroidSupportInjectionModule.class,
ActivityBindingModule.class,
DatabaseModule.class,
})
public interface ApplicationComponent extends AndroidInjector<ExampleApplication> {
Database database();
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
ApplicationComponent build();
}
@Override
void inject(ExampleApplication instance);
}
DatabaseModule.java
@Module(subcomponents = DatabaseComponent.class)
public class DatabaseModule {
@Provides
@ApplicationScope
Database provideDatabase(
@NumberOfCores int numberOfCores,
DatabaseComponent.Builder databaseComponentBuilder) {
return databaseComponentBuilder
.databaseImplModule(new DatabaseImplModule(numberOfCores / 2))
.build()
.database();
}
}
DatabaseComponent.java
@Subcomponent(modules = DatabaseImplModule.class)
public interface DatabaseComponent {
// @PrivateToDatabase <- Is this a qualifier? A scope? Neither?
Database database();
@Subcomponent.Builder
interface Builder {
Builder databaseImplModule(DatabaseImplModule databaseImplModule);
DatabaseComponent build();
}
}
DatabaseImplModule.java
@Module
public class DatabaseImplModule {
DatabaseImplModule(int concurrencyLevel) {}
@Provides DatabaseConnectionPool provideDatabaseConnectionPool() {
return new DatabaseConnectionPool();
}
@Provides DatabaseSchema provideDatabaseSchema() {
return new DatabaseSchema();
}
}
Database.java
public class Database {
@Inject
public Database() { }
public String name() {
return "I have a name";
}
}
我试图看一下dagger subcomponents documentation,特别是用于封装的子组件部分。我试图创建一个code example 看看我能否使它工作,但是没有运气。我在文档中缺少什么吗? (有一行代码注释了@PrivateToDatabase,我不确定它是哪种注释。)