나는 단검 싱글 톤을 안드로이드 구성 요소 (서비스)와 ViewModel에 주입하는 데 어려움을 겪고 있습니다.안드로이드 ViewModel에 setter injection을 사용하는 것에있어 문제점은 무엇입니까 ViewModel.Factory를 구현하고 주입합니까?
참고 자료로 question을 참조하십시오. 같은 개체를 사용하여 ViewModel의 필드 및 서비스에 필드를 삽입하는 방법에 대한 좋은 예가 없습니다. 그것에 간단한 해결책이있는 경우에 나는 그것을보고 싶을.
나는 ViewModel.Factory을 구현하고 만드는 방법을 통해 의존성이있는 뷰 모델 서브 클래스의 생성자에 종속성을 주입하는 길을 가야 답변을 몇 가지 질문, here 및 here을 발견했다.내 질문입니다. 액티비티 (및 서비스)에 객체를 주입 한 다음 setter를 사용하여 객체를 검색 한 후에 ViewModel에 주입하는 것과 관련된 심각한 문제가 있습니까? 예를 들어. 나는 값이 이미 설정되어 있는지 확인, 그것이 null의 경우에만 설정할 수있는보기 MainViewModel
클래스에서
class MainActivity : AppCompatActivity() {
@Inject lateinit var messageBus: MessageBus // "thing" I want in the ViewModel
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
// get the ViewModel
val viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
// inject the "thing" via a setter
viewModel.messageBus = messageBus
}
}
.
class MainViewModel: ViewModel() {
var messageBus: MessageBus? = null
set(value) {
if (field == null) {
field = value
// do initialization stuff
}
}
}