Нет, вы не можете ссылаться на DLL, скомпилированную в .NET 4.0, из программы, скомпилированной в .NET 3.5. Приложения .NET Framework обычно имеют обратную совместимость, то есть вы можете ссылаться на сборку .NET 3.5 из кода .NET 4.0, но обратное неверно.
Вы можете попробовать скомпилировать проект .NET 3.5 в 4.0 или компилировать сборку .NET 4.0 в .NET 3.5, любой из которых будет работать, если они являются опцией.
В моем случае причина состояла в том, что я пытался получить совместно использованный экземпляр ViewModel в моем фрагменте к скоро - прежде чем действие было создано. Это происходит, когда приложение восстанавливает свое состояние, будучи уничтоженным.
Предварительные условия :
Код в действии:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//factory is constructed using Dagger
val factory = App.get().components().appComponent.getMapViewModelFactory()
//activity creates the instance of MapViewModel
viewModel = ViewModelProviders.of(this, factory)[MapViewModel::class.java]
}
Код во фрагменте:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//fragment receives the instance of MapViewModel
viewModel = ViewModelProviders.of(activity!!)[MapViewModel::class.java]
...
}
, Когда я открываю приложение впервые, все хорошо работает: действие создает экземпляр ViewModel; я открываю Fragment, которые получают экземпляр ViewModel. Но когда, когда приложение пытается восстановить свое состояние, будучи уничтоженным, сначала оно называет тело onCreate Фрагмента и затем тело onCreate Действия. В той точке фрагмент не может получить ViewModel, поскольку Действие еще не создало его.
Решение 1 : Переместите код, когда фрагмент получит ViewModel от onCreate до onViewCreated. Который прекрасен, поскольку я наблюдаю весь liveDatas в onViewCreated также.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel = activity?.run { ViewModelProviders.of(this)[MapViewModel::class.java] } ?: throw Exception("Invalid Activity")
viewModel.getSurveyDateLiveData().observe(viewLifecycleOwner, Observer<String> { dateTextView.text = it })
...
}
Решение 2 : Создайте экземпляр ViewModel в Activity.onCreate прежде , super.onCreate называют. В этом случае можно получить ViewModel во фрагменте onCreate.
override fun onCreate(savedInstanceState: Bundle?) {
val factory = App.get().components().appComponent.getMapViewModelFactory()
viewModel = ViewModelProviders.of(this, factory)[MapViewModel::class.java]
super.onCreate(savedInstanceState)
Timber.d("cc: onCreate: $this ")
}