マイモジュール:ダガー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
になります。つまり、注入がフィールドに入力されませんでした。
私はこの例をDocsとまったく同じようにしていますが、問題は何ですか?
注:ビルダーライン上
tcpComponent = DaggerTcpManagerComponent.builder().tcpManagerModule(new TcpManagerModule(context)).build();
私は "tcpManagerModuleが推奨されていません" と言って警告を持っています。この問題についての回答hereとその言葉をお読みください
廃止を無視することができます。未使用のメソッドやモジュールを通知するためのものです。サブグラフのどこかでアプリケーションを実際に使用する必要があるとすぐに、モジュールが必要になり、廃止予定の警告は消えてしまいます。
私はインスタンスを必要とせず、使用していませんか?ここの問題は何ですか?
私が必要としたもの。ありがとう –