2017-11-23 1 views
0

나는 단검 싱글 톤을 안드로이드 구성 요소 (서비스)와 ViewModel에 주입하는 데 어려움을 겪고 있습니다.안드로이드 ViewModel에 setter injection을 사용하는 것에있어 문제점은 무엇입니까 ViewModel.Factory를 구현하고 주입합니까?

참고 자료로 question을 참조하십시오. 같은 개체를 사용하여 ViewModel의 필드 및 서비스에 필드를 삽입하는 방법에 대한 좋은 예가 없습니다. 그것에 간단한 해결책이있는 경우에 나는 그것을보고 싶을.

나는 ViewModel.Factory을 구현하고 만드는 방법을 통해 의존성이있는 뷰 모델 서브 클래스의 생성자에 종속성을 주입하는 길을 가야 답변을 몇 가지 질문, herehere을 발견했다.

내 질문입니다. 액티비티 (및 서비스)에 객체를 주입 한 다음 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 
     } 
    } 
} 

답변

0

나는 약간 해킹이라고 생각하지만 해로운 해킹이 아닙니다. 나는 ViewModelFactory에 단검을 사용하고 그 기능에 필요한 모든 의존성과 함께 단검을 사용하고 그 결과를 활동에 주입하여 of(FragmentActivity activity, ViewModelProvider.Factory factory) 방법으로 전달할 수있는 아이디어를 좋아합니다. 해당 속성의 변경 가능성을 피합니다.

관련 문제