Мой модуль:Dagger 2 - инъекционные несколько объектов одного типа с использованием @Named не работает
@Module
public class TcpManagerModule {
private ITcpConnection eventsTcpConnection;
private ITcpConnection commandsTcpConnection;
public TcpManagerModule(Context context) {
eventsTcpConnection = new EventsTcpConnection(context);
commandsTcpConnection = new CommandsTcpConnection(context);
}
@Provides
@Named("events")
public ITcpConnection provideEventsTcpConnection() {
return eventsTcpConnection;
}
@Provides
@Named("commands")
public ITcpConnection provideCommandsTcpConnection() {
return commandsTcpConnection;
}
}
Компонент:
@Component(modules = TcpManagerModule.class)
public interface TcpManagerComponent {
void inject(ITcpManager tcpManager);
}
класс, где впрыск происходит:
public class DefaultTcpManager implements ITcpManager {
private TcpManagerComponent tcpComponent;
@Inject @Named("events") ITcpConnection eventsTcpConnection;
@Inject @Named("commands") ITcpConnection commandsTcpConnection;
public DefaultTcpManager(Context context){
tcpComponent = DaggerTcpManagerComponent.builder().tcpManagerModule(new TcpManagerModule(context)).build();
tcpComponent.inject(this);
}
@Override
public void startEventsConnection() {
eventsTcpConnection.startListener();
eventsTcpConnection.connect();
}
}
Когда я звоню startEventsConnection
, я получаю NullPointerException
- это означает, что инъекция не заполнила поля.
Я следовал примеру именно так, как это делается в Документах, в чем проблема?
Примечание: на строитель линии
tcpComponent = DaggerTcpManagerComponent.builder().tcpManagerModule(new TcpManagerModule(context)).build();
У меня есть предупреждение о том, "tcpManagerModule устарела". Я прочитал ответ here об этом выпуске, и его высказывание
Можно с уверенностью сказать, что вы можете просто игнорировать устаревание. Он предназначен для уведомления вас о неиспользуемых методах и модулях. Как только вы на самом деле потребуете/используете приложение где-то на вашем подграфе, модуль понадобится, и предупреждение об устаревании исчезнет.
Итак, я не требую/использования экземпляров? В чем проблема?
именно то, что мне нужно. благодаря –