首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >点击按钮时动态注入匕首2

点击按钮时动态注入匕首2
EN

Stack Overflow用户
提问于 2020-04-04 07:02:19
回答 1查看 319关注 0票数 0

不确定这是否可能。然而,我正在寻找解决这一问题的方法。

代码语言:javascript
复制
class User(val name: String, val email: String)

class MyActivity : AppCompatActivity {
    @Inject lateinit var vm: MyViewModel

    override fun onCreate(bundle: Bundle?) {
        DaggerMyActivityComponent.create().inject(this)
        super.onCreate(bundle)
        setContentView(R.layout.activity_my)

        myButton.setOnClickListener {
            vm.insert(pathEditText.text.toString(), User("test name", "test email"))
        }
    }
}

class MyViewModel @Inject constructor(val repo: MyRepository) {
    fun insert(path: String, user: User) {
        repo.insert(user)
    }
}

class MyRepository(path: String) {
    val collection = Firebase.firestore.collection(path)

    fun insert(user: User) {
        collection.set(user)
    }
}

@Component(modules = [MyModule::class])
interface MyActivityComponent {
    fun inject(activity: MyActivity)
}

@Module class MyModule {
    @Provides fun repo() = MyRepository(How do I get the path here?)
}

问题:

如何动态地将路径注入MyModule的@Provides (),因为只有当用户键入EditText时才能知道路径。

我不知道这是否可能。不过,我很想知道一个可能的解决方案。我甚至准备改变我的整体解决方案,如果它适合我的情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-04 07:18:48

您可以使用飞重工厂创建新的回购实例。如下所示:

代码语言:javascript
复制
class MyRepositoryFactory {

  fun create(path: String): MyRepository {
    return MyRepository(path)
  }

}

@Module class MyModule {
    @Provides fun repoFactory() = MyRepositoryFactory()
}

class MyViewModel @Inject constructor(val repoFactory: MyRepositoryFactory) {
    fun insert(path: String, user: User) {
        repoFactory.create(path).insert(user)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61024797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档