|
Зациклились зависимости Wpf Net Core
|
|||
---|---|---|---|
#18+
Всем привет, пишу Wpf-приложение на Core и столкнулся со следующей проблемой. Я хочу в CompositionRoot приложения перехватывать создание View и ViewModel для них. Все View-это UserControls, которые хостятся в Window. В Window в качестве хоста для View использую компонент materialDesign:Transitioner из одноименного UI фреймворка. Он представляет собой ItemsControl, который принимает в качестве ItemSource коллекцию UserControl и при смене SelectedIndex анимированно меняет View. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
CodeBehind ControlHoster Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
Что делает IViewProvider: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Конкретная реализация IViewProvider Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Сервис навигации определен с примитивными типами аргументов, потому что ViewModels находятся в другом проекте-библиотеке классов и я не могу сослаться на него из WPF-проекта, так как Wpf-проект уже имеет зависимость от ViewModels и соответственно срабатывает защита от зацикливания зависимостей. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Его имплементация Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
DataContext присваиваю для UserControl через конструктор Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
, который раздаю через внедрение зависимостей в Composition Root App.xaml.cs Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79.
Все работает ровно до этого момента. Но мне необходимо внедрить INavigation в те ViewModel, в которых происходит инициация смены View. Если я внедряю INavigation в LoginViewModel то я попадаю в Dependency Deadlock:LoginViewModel требует INavigation, а INavigation в конечном счете требует LoginViewModel. Подскажите плиз как можно передизайнить данную структуру зависимостей? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2020, 11:04 |
|
Зациклились зависимости Wpf Net Core
|
|||
---|---|---|---|
#18+
vb_sub, Неправильное использование DI Зачем ты сразу создаёшь экземпляры всех объектов и используешь AddSingleton? с таким подходом тебе совсем не нужен DI Но я думаю что View и VM нужно создавать по мере необходимости выбрасывать если необходимость отпала. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2020, 01:50 |
|
Зациклились зависимости Wpf Net Core
|
|||
---|---|---|---|
#18+
pation, я не создаю объекты, а регистрирую их зависимость. Singleton потому что в рамках wpf-приложения View и ViewModel должны быть по одному экземпляру на приложение. Убивать VM нет смысла, потому что надо будет куда-то сохранять ее состояние, потом восстанавливать- проще держать ее в памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2020, 09:48 |
|
Зациклились зависимости Wpf Net Core
|
|||
---|---|---|---|
#18+
vb_sub Подскажите плиз как можно передизайнить данную структуру зависимостей? vb_sub Убивать VM нет смысла, потому что надо будет куда-то сохранять ее состояние, потом восстанавливать- проще держать ее в памяти. Походу вам виднее и вы не нуждаетесь в подсказках :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2020, 23:36 |
|
|
start [/forum/topic.php?fid=21&msg=40029185&tid=1440257]: |
0ms |
get settings: |
8ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
34ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
98ms |
get tp. blocked users: |
0ms |
others: | 352ms |
total: | 502ms |
0 / 0 |