ダガー2の意味を理解しようとしていて、悲惨に失敗しています。ここでダガー2の最も基本的なサブコンポーネントのサンプルが動作しない
は、私が仕事に取得しようとしているコードです:
TranslationServiceは、DataServiceに依存している:2つのサービスを提供するために、
// Relies on injected DataService
public class TranslatorService implements ServiceContracts.TranslatorService
{
ServiceContracts.DataService mDataService;
public TranslatorService(ServiceContracts.DataService dataService) {
this.mDataService = dataService;
}
public String translate(String key) {
if (mDataService == null)
return "Default";
return mDataService.getData(key);
}
}
// implements DataService
public class LocalDataService implements ServiceContracts.DataService {
@Override
public String getData(String key) {
return key + " (local)";
}
}
二つのモジュール:
@Module
public class DataServiceModule {
@Provides
public ServiceContracts.DataService dataService() {
return new LocalDataService();
}
}
@Module
public class TranslatorModule {
@Provides
TranslatorService translatorService(ServiceContracts.DataService dataService) {
return new TranslatorService(dataService);
}
}
一つを@コンポーネントと1つの@Subcomponent(TranslationServiceはDataServiceに依存するため、
@Component(modules = {DataServiceModule.class})
public interface DataServiceComponent {
TranslatorComponent translatorComponent(TranslatorModule translatorModule);
}
@Subcomponent(modules = {TranslatorModule.class})
public interface TranslatorComponent {
TranslatorService translatorService();
}
コードはうまくいきます。私は今、サブコンポーネントの生成されたダガーの実装を見たとき、私はこれを取得:それはプライベートであるため、
private final class TranslatorComponentImpl implements TranslatorComponent {
private final TranslatorModule translatorModule;
private Provider<TranslatorService> translatorServiceProvider;
private TranslatorComponentImpl(TranslatorModule translatorModule) {
this.translatorModule = Preconditions.checkNotNull(translatorModule);
initialize();
}
@SuppressWarnings("unchecked")
private void initialize() {
this.translatorServiceProvider =
TranslatorModule_TranslatorServiceFactory.create(
translatorModule, DaggerDataServiceComponent.this.dataServiceProvider);
}
@Override
public TranslatorService translatorService() {
return translatorServiceProvider.get();
}
}
だから、基本的に私は、サブコンポーネントを使用することはできません。 TranslatorServiceの実際のインスタンスをどのように取得するのですか?
私は心から誰かが私を助けることを願って - 私は今、数時間のためにこれを把握して、エラーまたはプライベートコンポーネントクラスの実装を構築取得しようとしています...
ここでは何をしようとしているのかよくわからないので、これらの依存関係を注入する場所にコードを投稿できますか? – Ankit
私は本当に「何かを生む」ことを試みているわけではありません...それは、ダガーを本当に理解するために、基本サンプルで遊んでいるようなものです。私はC#の背景から来ているし、C#のDIコンテナで少し異なって動作します。 サブコンポーネントの全体のコンセプトは私を少し逃す。 私は通常、(Daggerから)DaggerTranslatorComponent.build()。xxxxxのようなものを入手して、インジェクタを作成できるようにします。しかし、DaggerTranslatorComponentは存在しないので、私は立ち往生しています。 – Wolfgang