Как трактовать зависимости модулей как отдельных компонентов / контейнеров в Dagger-2? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть следующий класс с двумя членами, которые отличаются лишь незначительно:

public class TadeStrategy{

//These instances are deeply nested object graphs themselves
private TradingModelBuilder ltfTradingModel;
private TradingModelBuilder htfTradingModel;

@Inject
public TradeStrategy(@Named("ltfModel") TradingModelBuilder ltfTradingModel,
                     @Named("htfModel") TradingModelBuilder htfTradingModel){
   this.ltfTradingModel = ltfTradingModel;
   this.htfTradingModel = htfTadingModel;

}

Мой модуль для удовлетворения этих зависимостей.Я использую квалификаторы для внедрения

@Module
public class GlobalTradeSettingsModule {

@Provides
@Singleton
//this object should be treated as a singleton across the entire application
ObjectMapper mapper() {
    return new ObjectMapper ();
}

@Provides
//no @Singleton, because each TradingModelBuilder should get an own instance of TadeHistory
TradeHistory tradeHistory() {
    return new TradeHistory();
}

@Provides
@Singleton
@Named("ltfModel")
TradingModelBuilder ltfTradingModel(TradeHistory tradeHistory) {
    return  new TradingModelBuilder(tradeHistory, new Ltf());
}

@Provides
@Singleton
@Named("htfModel")
TradingModelBuilder htfTradingModel(TradeHistory tradeHistory) {
    return  new TradingModelBuilder(tradeHistory, new Htf());
}
}

TradingModelBuilder - это глубокий граф объектов, в котором я хочу, чтобы переданный объект TradeHistory рассматривался как одиночный объект.Как я могу это сделать?Например, предположим, что где-то глубоко в графе объектов TradingModelBuilder существует класс, подобный следующему:

public class TradHistoryConsumer{
    TradeHistory th;

    @Inject
    public TradHistoryConsumer(TradeHistory th){
         this.th = th;
    }
}

Проблема с модулем, описанным выше, состоит в том, что новая TradeHistory-зависимость будет введена.Однако мне нужны экземпляры TradeHistory, которые я вставил в конкретный TradingModelBuilder (см. Модуль).Таким образом, в основном TradingModelBuilder должен стать собственным контейнером зависимостей (начиная с зависимостей, введенных через модуль) с доступом ко всем зависимостям модуля (например, ObjectMapper).

...