Я последовал примеру, который утверждает, что это лучший «новый путь».(https://proandroiddev.com/exploring-the-new-dagger-android-module-9eb6075f1a46) Полный пример исходного кода приведен здесь (https://github.com/jshvarts/DaggerAndroidKotlinSampleApp).. Используется для ввода свойств в Activity, подобную этой,
class MainActivity:AppCompatActivity()
{
@Inject
lateinit var something:Something
override fun onCreate(..)
{
AndroidInjection.inject(this)
...
И в модуль
* 1009.*
Это хорошо работает, но как насчет пользовательского класса Dialog
? Я создаю диалог с некоторыми пользовательскими аргументами (которые известны только во время выполнения с помощью пользовательских данных), например, следующим: я могу изменить конструктор MyDialogвзять something
и позволить действию в конечном итоге передать something
конструктору MyDialog.
Но это было бы некрасиво, потому что действие не создает MyDialog напрямую. MainActivity имеет пользовательский элемент управления, и этот пользовательскийЭлемент управления показывает MyDialog при нажатии кнопки на нем.Так, чтобы использовать метод конструктора, я должен передать something
из MainActivity в пользовательский элемент управления, а затем позволить пользовательскому элементу управления создать MyDialog с something
.
class MyDialog:Dialog
{
@Inject
lateinit var something:Something
constructor(context:Context?, arg1, args2, args3):super(context)
{
//Cannot call AndroidInjection.inject, because
//it does not take a Dialog.
AndroidInjection.inject(this); //<--Does NOT work.
Если бы я только мог сказать Даггеру вводить поля MyDialog в его конструкторе ... Какое решение для этого?