小编Nad*_*ada的帖子

运行时传递参数 dagger 2

我有一个模块,UserModule它接受一个字符串并提供一个用户对象。

用户模块:

@Module
class UserModule(val name: String) {
    @Provides
    fun provideUser() : User = User(name = name)
}
Run Code Online (Sandbox Code Playgroud)

和 aViewModelComponent作为UserModule其组成部分之一

视图模型组件:

@Singleton
@Component(modules = [UserModule::class])
interface ViewModelComponent {
    fun inject(activity: MainActivity)
}
Run Code Online (Sandbox Code Playgroud)

通常我会在我的应用程序中提供组件,如下所示:

class MainApplication : Application() {

    lateinit var component: AppComponent

    override fun onCreate() {
        super.onCreate()
        component = DaggerAppComponent.builder()
                    .userModule(UserModule("Name"))
                    .build()
    }
}
Run Code Online (Sandbox Code Playgroud)

并在我的活动中引用它,如下所示:

class MainActivity : AppCompatActivity() {

    @Inject lateinit var user: User

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        (application as …
Run Code Online (Sandbox Code Playgroud)

java android kotlin dagger-2

6
推荐指数
1
解决办法
3346
查看次数

通知如何适应 iOS VIPER 架构?

我正在查看 VIPER 架构,我想知道应用程序中的通知会去哪里。我使用 Realm 本地数据库,它能够在模型更新时发送通知。通知是从 INTERACTOR --> PRESENTER --> VIEW 广播的还是从其他地方广播的?

architecture ios swift viper-architecture

5
推荐指数
1
解决办法
485
查看次数

在Android中注入ViewModelFactory有什么意义-Dagger 2

我最近开始从事Android开发,并且来自iOS背景,诸如依赖注入框架和ViewModelFactories之类的概念对我来说是新事物。在我看到的所有教程中,ViewModels始终扩展了所提供的ViewModel类android.arch.lifecycle.ViewModel。如果viewModel具有参数,则必须创建一个ViewModelFactory并由Dagger注入到活动中

@Provides
@ActivityScope
fun provideViewModelFactory(dependency: Dependency) : ViewModelProvider.Factory = CustomViewModelFactory(dependency)
Run Code Online (Sandbox Code Playgroud)

CustomViewModelFactory然后将负责创建ViewModels。一切都很好,但是,当我可以将viewModels直接注入这样的活动中时,我并没有真正理解viewModelFactory的要点:

@Module
class ViewModelModule(private val user: User) {
    @ActivityScope
    @Provides
    fun provideMainViewModel() = MainViewModel(user = user)
    fun provideOtherViewModel() = OtherViewModel()
}

@ActivityScope
@Subcomponent(modules = [ViewModelModule::class])
interface MainActivitySubComponent {
    fun inject(activity: MainActivity)
}

@ApplicationScope
@Component()
interface ApplicationComponent {
    fun addMainActivitySubComponent(viewModelModule: ViewModelModule) : MainActivitySubComponent
}
Run Code Online (Sandbox Code Playgroud)

在我的活动中

class MainActivity : AppCompatActivity() {

    @Inject lateinit var viewModel: MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val subComponent = (application as MainApplication).component.addMainActivitySubComponent(ViewModelModule(User("NEW NAME"))) …
Run Code Online (Sandbox Code Playgroud)

java android kotlin dagger-2

4
推荐指数
2
解决办法
3338
查看次数