меня есть DI контейнер, который viewmodel создавать может в теории, но часто они должны создаваться внутри viewmodel и пока что некоторые VM создаются руками. Чтобы везде контейнером не пользоваться, идеально было бы иметь некий Router, который можно дергать так - `router.NavigateTo(new SettingsWindow(/*some params*/))`И внутри роутера уже создавать и окно и viewmodel показывать.
У ReactiveUI есть свой роутер, который именно так обычно и дёргают: https://reactiveui.net/docs/handbook/routing/ Правда, он ViewModel-first; когда работаем с модалками и окнами, обычно велосипедим свой IModalNavigationService и инжектим потом его вью-моделям. Есть ещё один вариант, более кроссплатформенный — https://reactiveui.net/docs/handbook/interactions/
Касательно DI контейнера, предпочитаю дёргать его по возможности минимальное количество раз или вовсе руками строить граф зависимостей https://github.com/worldbeater/Camelotia/blob/master/Camelotia.Presentation.Avalonia/Program.cs#L24 если нужно в рантайме ресолвить вм, пробрасывается Func<TInput, TVM> с верхнего уровня (крутота в наличии compile-time checks)
Обсуждают сегодня