5

Qualified フィールド インジェクション コンストラクト インジェクションとメソッド インジェクションを正常に使用しました。次のコードのように、dagger 2.10 から Qualified メソッドへの依存関係を注入することを期待しています。

public class MainActivity extends AppCompatActivity {

   @Override protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   DaggerMainActivityComponent.create().inject(this);
   }

  @Named("firstName")
  @Inject
  void initFirstName(String firstName){
  }

  @Named("lastName")
  @Inject
  void initLastName(String lastName){
  }

@Module public class UserModule {

   @Named("firstName")
   @Provides
   String provideFirstUserName() {
   return "Nasser";
   }

  @Named("lastName")
  @Provides
  String provideLastUserName() {
    return "Khosravi";
  }
 }

 @Component(modules = { UserModule.class})
 public interface MainActivityComponent {

  void inject(MainActivity mainActivity);

  @Named("firstName")
  String getFirstName();

 @Named("lastName")
 String getLastName();
 }
}

しかし、私がこのコードを使用する
と、@Injectコンストラクターなしで、または@Provides-または@Produces-アノテーション付きメソッドからjava.lang.Stringを提供できません。


ウェブには短剣に関する簡単なチュートリアルがたくさんありますが、それらはすべて同じであり、修飾されたメソッド注入に関する例は見つかりません。

メソッドインジェクションが必要な理由

次の理由から、フィールド注入よりもメソッド注入を好みます。

  • フィールドインジェクションよりクリア
  • ブレークポイントを設定し、注入されたデバッグ値を単純に設定できます
  • プライベートフィールドに注入された値を割り当てることができます
  • ....

私の質問:

dagger 2 で Qualified メソッドの注入は可能ですか? またはメソッド注入の私の期待は間違っていますか?
可能であれば、どうすれば達成できますか?

アドバイスをありがとう。

4

1 に答える 1