EDITアンドロイドダガー:私はこの問題を解決@Injectコンストラクタ
ことなく、外部クラスを提供することはできません。下の私のポストを参照してください。
私はDaggerとKotlinを使用してAndroidアプリを書いています。
私は@Provides
SimpleDateFormat
モジュールを、持っているDateHelper
@Singleton
class DateHelper @Inject constructor(var dateFormat: SimpleDateFormat) {
...
}
私のクラスにjava.text.SimpleDateFormat
クラスを注入します。
@Module
class DateModule {
@Singleton
@Provides
fun dateFormat(): SimpleDateFormat {
return SimpleDateFormat("yyyy-MM-dd", Locale.US)
}
}
とダガーコンポーネント:
@Singleton
@Component(modules = arrayOf(MyAppModule::class, DateModule::class))
interface MyAppComponent {
...
}
最後に私のApplication
:今
open class MyApplication : Application() {
private lateinit var myAppComponent: MyAppComponent
override fun onCreate() {
super.onCreate()
myAppComponent = createGraph()
}
open fun createGraph(): MyAppComponent {
return DaggerMyAppComponent.builder().myAppModule(MyAppModule(this)).build()
}
fun getAppComponent(): MyAppComponent {
return myAppComponent
}
}
、私は私のFragment
へ@Inject
DateHelper
にしようとしている:
class CoffeeNoteFragment : Fragment(), DatePickerDialog.OnDateSetListener {
@Inject lateinit var dateHelper: DateHelper
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(activity.application as MyApplication).getAppComponent().inject(this)
}
}
私はこのエラーを取得していますなぜ私は
@Providing
SimpleDateFormat
てるので、
は、残念ながら私は
error: [com.example.mateusz.coffeenotes.application.MyAppComponent.inject(com.example.mateusz.coffeenotes.CoffeeNoteFragment)] java.text.SimpleDateFormat cannot be provided without an @Inject constructor or from an @Provides-annotated method.
java.text.SimpleDateFormat is injected at
com.example.mateusz.coffeenotes.database.DateHelper.<init>(arg0)
com.example.mateusz.coffeenotes.database.DateHelper is injected at
com.example.mateusz.coffeenotes.CoffeeNoteFragment.dateHelper
com.example.mateusz.coffeenotes.CoffeeNoteFragment is injected at
com.example.mateusz.coffeenotes.application.MyAppComponent.inject(arg0)
コンパイル時エラーを取得しています私は、理解していません。私がSimpleDateFormat
クラスを所有していないので、明らかに@Inject
コンストラクタを追加できません。
私が迷っているものは何ですか?
これは私にとってうまく見えます。 '@ Named()'なんか? –
私は問題を解決することができました。下の私のポストを参照してください。私は実際の問題に気付くのに十分な情報を提供していませんでしたが、エラーメッセージがMyAppComponentを指していたので、別のコンポーネントからエラーが発生していることを認識しませんでした。 –