web-dev-qa-db-ja.com

HasActivityInjectorはAndroid dagger 2では解決できません。

私はAndroidアプリケーションにHasActivityInjectorを実装しようとしましたが、HasActivityInjectorを解決できないことを示しています。依存関係の下私のプロジェクトで使用したプラグイン-

apply plugin: 'kotlin-kapt'

そして

implementation 'com.google.dagger:dagger:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'

これが私が試しているコードです-

class RanoBoilerplateApplication : Application(), HasActivityInjector{
    @Inject
    lateinit var activityDispatchingAndroidInjector:
            DispatchingAndroidInjector<Activity>

    override fun onCreate() {
        super.onCreate()

        DaggerAppComponent.builder()
                .application(this)
                .build()
                .inject(this)
    }

    override fun activityInjector(): AndroidInjector<Activity> =
            activityDispatchingAndroidInjector
}

私はそれを動作させるために含める必要がある他の依存関係を知りません。誰かがこれを以前に行ったことがある場合は私を助けてください。

最新のDagger 2バージョン here を見つけます。

ハッピーコーディング:-)

14
Bajrang Hudda

2.24へのアップデート後に誰かがここに来た場合、これは削除されました: https://github.com/google/dagger/commit/3bd8f707cb28fd0c5f3abb4f87658566f8b52c1

代わりにHasAndroidInjectorを使用できます。

58
mbonnin

答えるのはかなり遅いですが、短剣の世界が初めての人には役立つかもしれません!

アプリケーションクラスでHasActivityInjector、HasServiceInjectorなどの複数のDaggerインターフェイスを実装する定型を回避するために、HasAndroidInjectorに置き換えられました。これで、以下のようにHasAndroidInjectorを実装するだけで済みます。

class DaggerExampleApplication : Application(), HasAndroidInjector{

       @Inject lateinit var androidInjector : DispatchingAndroidInjector<Any>

       override fun androidInjector(): AndroidInjector<Any> = androidInjector
       override fun onCreate() {
         super.onCreate()
         //Your code
       }        
}
14
Subhan Ali

私の依存関係は次のようになります:

//Dagger
implementation "com.google.dagger:dagger:${libs.dagger}"
implementation "com.google.dagger:dagger-Android:${libs.dagger}"
implementation "com.google.dagger:dagger-Android-support:${libs.dagger}"
kapt "com.google.dagger:dagger-compiler:${libs.dagger}"
kapt "com.google.dagger:dagger-Android-processor:${libs.dagger}"

Appcompatを使用している場合は、supportが必要です。そしてその ${libs.dagger}は、必要な短剣バージョン(2.16など)を指します。依存関係の詳細 こちら を読んでください。

5
Demigod

@mbonninと@Subhanの回答に加えて、バージョン2.24以降、Has{Activity,Fragment,Service,ContentProvider,BroadcastReceiver}が削除されました。この古い実装を引き続きサポートする場合は、HasAndroidInjectorHas{Activity,Fragment,Service,ContentProvider,BroadcastReceiver}の両方をサポートするバージョン2.23を使用してください。

これは、バージョン2.24のようになります。

応用

class ExampleApp: Application(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

/..../

アクティビティ

class ExampleActivity: AppCompatActivity(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

/..../

断片

class MoreFragment: Fragment(), HasAndroidInjector {

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

/..../
1
Kurt Capatan

Android devloperでKotlinを使用している場合(より高速なコードと多くの定型コードを回避するため)、Koin-

Kotliin開発者のための実用的な軽量の依存関係注入フレームワーク。機能的な解決のみを使用して、純粋なKotlinで記述:プロキシなし、コード生成なし、リフレクションなし

信頼してください、それはdagger2よりも簡単です。詳細は こちら および 公式ウェブサイト をご覧ください。

0
Bajrang Hudda

HasActivityInjectorが新しいdaggerに導入されましたAndroidサポートモジュール。以下の依存関係をbuild.gradleファイルに含めます。

kapt "com.google.dagger:dagger-Android-processor:2.18"
implementation "com.google.dagger:dagger-Android-support:2.18"
0
Vipul Shah