Если вы хотите создать другое Scope
, то этот объем должен быть подкомпонентом @Singleton
.
Предположим, у вас есть ApplicationComponent
аннотированный с @Singleton
:
@Singleton
@Component(
modules = ApplicationModule.class
)
public interface ApplicationComponent {
JobManagerComponent provide(JobManagerModule jobManagerModule);
}
ApplicationModule
обеспечивает Context
:
@Module
public class ApplicationModule {
protected final Application mApplication;
public ApplicationModule(Application application) {
mApplication = application;
}
@Provides
@ApplicationContext
public Context provideApplicationContext() {
return mApplication;
}
}
Обратите внимание, что ApplicationComponent
должен предоставить JobManagerComponent
и Context
снабжен @ApplicationContext
аннотацию.
Теперь вы создаете JobManagerComponent
как @Subcomponent
из ApplicationComponent
:
@UserScope
@Subcomponent(
modules = JobManagerModule.class
)
public interface JobManagerComponent{
}
JobManagerModule
:
@Module
public class JobManagerModule
{
private static final String TAG = JobManagerModule.class.getSimpleName();
@UserScope
@Provides
public JobManager providesJobManager(@ApplicationContext Context context)
{
Log.d(TAG, "Providing JobManager");
final Configuration configuration = new Configuration.Builder(context).build();
return new JobManager(configuration);
}
}
Обратите внимание на удаление include
из @Module
аннотацию и Context
аннотацию @ApplicationContext
Создание JobManagerComponent
:
JobManagerComponent jobComponent = DaggerApplicationComponent.builder()
.applicationModule(applicationModule)
.build()
.provide(new JobManagerModule());
Это решило проблему, но это вызвало конфликт в другом месте. Я отправлю еще один вопрос. – Subby
Я задал вопрос http://stackoverflow.com/questions/40632408/two-injects-in-one-object-but-from-two-different-components – Subby
Любая идея, как я могу вставлять JobManager в MyObject вместе с другим объектом из другого компонента? – Subby