WPF что актуально?
От: varenikAA  
Дата: 19.04.21 03:33
Оценка:
Требуется переделка WPF .net 47 проекта. Самокат/велосипед.
Хотел поинтересоваться что актуально из готовых реализаций.
Смотрю на Prism и ReactiveUI. Но может что-то есть еще.
В призме есть DryIoc и Unity. По умолчанию вроде DryIoc. Но на сайте в доках унити и меф.
привлекает наличие снипетов.
В ReactiveUI используется вроде Splat. У авалонцев видел жалобу на проблему жесткой привязки к сплату.

Еще вопрос, как лучше стартовать приложение автоматом как в примерах (Application) или же вручную через Main?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: WPF что актуально?
От: varenikAA  
Дата: 19.04.21 04:05
Оценка:
Здравствуйте, varenikAA, Вы писали:

AA>Требуется переделка WPF .net 47 проекта. Самокат/велосипед.

AA>Хотел поинтересоваться что актуально из готовых реализаций.
AA>Смотрю на Prism и ReactiveUI. Но может что-то есть еще.
AA>В призме есть DryIoc и Unity. По умолчанию вроде DryIoc. Но на сайте в доках унити и меф.
AA>привлекает наличие снипетов.
AA>В ReactiveUI используется вроде Splat. У авалонцев видел жалобу на проблему жесткой привязки к сплату.

AA>Еще вопрос, как лучше стартовать приложение автоматом как в примерах (Application) или же вручную через Main?


UPD: самокат MVVM. вьюшек в данный момент меньше 20. стабильно пока.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: WPF что актуально?
От: takTak  
Дата: 19.04.21 06:04
Оценка: 10 (1)
AA>Требуется переделка WPF .net 47 проекта. Самокат/велосипед.
AA>Хотел поинтересоваться что актуально из готовых реализаций.
AA>Смотрю на Prism и ReactiveUI. Но может что-то есть еще.
AA>В призме есть DryIoc и Unity. По умолчанию вроде DryIoc. Но на сайте в доках унити и меф.
AA>привлекает наличие снипетов.
AA>В ReactiveUI используется вроде Splat. У авалонцев видел жалобу на проблему жесткой привязки к сплату.

AA>Еще вопрос, как лучше стартовать приложение автоматом как в примерах (Application) или же вручную через Main?



плюс Prism в том, что ты ещё найдёшь кучу обучающих видео на все случаи жизни, кроме того, есть Reference Implementation, где можно тупо скопипастить то, что нужно, есть книжка , короче, если проинвестировать время на обучение, то будет база для разработки mvvm wpf приложения любой сложности, кроме того, почти все 3rd Party производители контролов поддерживают prism
Re[2]: WPF что актуально?
От: Mr.Delphist  
Дата: 19.04.21 09:00
Оценка: +1
Здравствуйте, takTak, Вы писали:

T>плюс Prism в том, что ты ещё найдёшь кучу обучающих видео на все случаи жизни, кроме того, есть Reference Implementation, где можно тупо скопипастить то, что нужно, есть книжка , короче, если проинвестировать время на обучение, то будет база для разработки mvvm wpf приложения любой сложности, кроме того, почти все 3rd Party производители контролов поддерживают prism


Prism для того масштаба что озвучил автор (20+ вьюшек) — всё равно что из Искандеров по амёбам стрелять. MVVM Light или аналогичного калибра фреймворк — самое то будет.
Re[3]: WPF что актуально?
От: takTak  
Дата: 19.04.21 09:16
Оценка:
T>>плюс Prism в том, что ты ещё найдёшь кучу обучающих видео на все случаи жизни, кроме того, есть Reference Implementation, где можно тупо скопипастить то, что нужно, есть книжка , короче, если проинвестировать время на обучение, то будет база для разработки mvvm wpf приложения любой сложности, кроме того, почти все 3rd Party производители контролов поддерживают prism

MD>Prism для того масштаба что озвучил автор (20+ вьюшек) — всё равно что из Искандеров по амёбам стрелять. MVVM Light или аналогичного калибра фреймворк — самое то будет.


если каждый раз нужно выбирать фреймворк в зависимости от размера приложения и каждый раз учить тот, который подходит по числу окошек, то проще сразу застрелиться,
с точки зрения сложности Prism , на самом деле, самый сложный из mvvm фреймворков, в нём почти всё сделано академически, при этом overhead- совершенно незначительный,
т.е. если всё делать по уму, то вряд ли чего-то сравнимое найдётся, если же надо по-быстрому на коленке слатать, то нафига вообще какой-то там фреймворк?

единственное , что в призме имхо было проблематично — это невозможность выгружать из памяти модули, больше ничего чего-то особенного вспомнить не могу... но это опять же особенный случай, который мало кого может интересовать

короче, если надо настоящий фреймворк, где легко и просто можно будет написать юнит-тест, что типа если пользователь выбрал из комбобокса такое-то значение и после этого появилось такое-то сообщение и была выполнена та или иная команда, то ничего даже близко сравнимого с призм просто не существует, если же такой цели не стоит, то можно обойтись и без фреймворка или использовать что-то типа https://github.com/firstfloorsoftware/mui, которых — миллион и маленькая тележка


вот тут, кстати, сравнение нескольких библиотек и фреймворков:
https://www.youtube.com/watch?v=8E000zu8UhQ
Отредактировано 19.04.2021 9:45 takTak . Предыдущая версия .
Re[2]: WPF что актуально?
От: VladCore  
Дата: 19.04.21 19:27
Оценка:
Здравствуйте, takTak, Вы писали:

T>плюс Prism в том, что ты ещё найдёшь кучу обучающих видео на все случаи жизни, кроме того, есть Reference Implementation, где можно тупо скопипастить то, что нужно, есть книжка , короче, если проинвестировать время на обучение, то будет база для разработки mvvm wpf приложения любой сложности, кроме того, почти все 3rd Party производители контролов поддерживают prism


пока MS жкспериментирует с менее громоздкими альтернативами сворованными из других фрейморков:
Вот MVU в MAUI, существует паралельнос MVVM:
readonly State<int> count = 0;

[Body]
View body() => new StackLayout
{
    new Label("Welcome to .NET MAUI!"),
    new Button(
        () => $"You clicked {count} times.",
        () => count.Value ++)
    )
};


так что нет уверенности что изучение MVVM это хорошая инвестиция на будующее
Re[3]: WPF что актуально?
От: takTak  
Дата: 19.04.21 21:02
Оценка:
T>>плюс Prism в том, что ты ещё найдёшь кучу обучающих видео на все случаи жизни, кроме того, есть Reference Implementation, где можно тупо скопипастить то, что нужно, есть книжка , короче, если проинвестировать время на обучение, то будет база для разработки mvvm wpf приложения любой сложности, кроме того, почти все 3rd Party производители контролов поддерживают prism

VC>пока MS жкспериментирует с менее громоздкими альтернативами сворованными из других фрейморков:

VC>Вот MVU в MAUI, существует паралельнос MVVM:
VC>
VC>readonly State<int> count = 0;

VC>[Body]
VC>View body() => new StackLayout
VC>{
VC>    new Label("Welcome to .NET MAUI!"),
VC>    new Button(
VC>        () => $"You clicked {count} times.",
VC>        () => count.Value ++)
VC>    )
VC>};
VC>


VC>так что нет уверенности что изучение MVVM это хорошая инвестиция на будующее


MVU — интересная штука, согласен, другое дело, что призма — это уже готовая архитектура приложения любой сложности, которая есть здесь и сейчас, пусть танцоры допилят MAUI до чего-то схожего, никто же не против, только сдаётся мне, что такое разве что для ксамарина какого-то с трёмя страницами проканать сможет, но посмотрим, а пока ....

вообще, имхо большая недоработка blazor состоит ещё и в том, что они до сих пор не представили ничего даже близко похожего на stock trader (prism reference implementation), вместо этого показывают до сих пор свой счётчик с двумя кнопками и одним лейблом, кто же на такое может повестись ?
Re[4]: WPF что актуально?
От: varenikAA  
Дата: 21.04.21 07:09
Оценка:
Здравствуйте, takTak, Вы писали:

T>MVU — интересная штука, согласен, другое дело, что призма — это уже готовая архитектура приложения любой сложности


У меня возникла проблема при использовании призм (следовал документации на сайте).
Нужно было создать несколько экзепляров. инжектить получилось только по одному известному типу, но т.к. разные экземпляры должны иногда выполнить код запуска,
то возникла проблема, я не смог зарегистрировать уже созданный экземпляр на на несколько типов. Причем ни dryioc ни unity не помогли.
Вы итоге, удалил велосипед, вьюшки сделал простыми (наследники от Window) и создаю их в конструкторе viewModel.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: WPF что актуально?
От: takTak  
Дата: 21.04.21 07:33
Оценка: 8 (1)
T>>MVU — интересная штука, согласен, другое дело, что призма — это уже готовая архитектура приложения любой сложности

AA>У меня возникла проблема при использовании призм (следовал документации на сайте).

AA>Нужно было создать несколько экзепляров. инжектить получилось только по одному известному типу, но т.к. разные экземпляры должны иногда выполнить код запуска,
AA>то возникла проблема, я не смог зарегистрировать уже созданный экземпляр на на несколько типов. Причем ни dryioc ни unity не помогли.
AA>Вы итоге, удалил велосипед, вьюшки сделал простыми (наследники от Window) и создаю их в конструкторе viewModel.

я не до конца понял, что там у тебя за проблема, в unity была возможность "инжектить" экземляр класса в конструктор, dryioc я не смотрел;
что же до того, что ты в конструкторе viewmodel создаёшь — ну как бы ты делаешь твои возможные viewemodel юнит-тесты зависимыми от чисто технических вещей, которые с твоей бизнес-логикой не имеют ничего общего,
если ты не собираешься писать никаких юнит-тестов под viewemodel, то подумай, нафига тебе вообще какие-то там фреймворки,

как я уже говорил, призм — самый сложный из wpf mvvm фреймворков, это даже больше чем просто mvvm фреймворк, это — готовая модульная архитектура, если ты не прочитаешь той книжки и не посмотришь хотя бы Introduction to PRISM от pluralsight, то вероятность наломать дров на пустом месте ненулевая
Re[6]: WPF что актуально?
От: varenikAA  
Дата: 21.04.21 09:03
Оценка:
Здравствуйте, takTak, Вы писали:


T>я не до конца понял, что там у тебя за проблема, в unity была возможность "инжектить" экземляр класса в конструктор, dryioc я не смотрел;


//InvalidOperationException: Нельзя создать более одного экземпляра System.Windows.Application в одном AppDomain.

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            var instance = new SuperService(this);

            containerRegistry.RegisterInstance<IRunable>(instance, "IRunable");
            containerRegistry.RegisterInstance<SuperService>(instance, "SuperService");
            // ни так, ни так не работает :???:
            Container.GetContainer().RegisterInstance<IRunable>("IRunable", instance, InstanceLifetime.Singleton);
            Container.GetContainer().RegisterInstance<SuperService>("SuperService", instance, InstanceLifetime.Singleton);
        }

        protected override void OnInitialized()
        {
            base.OnInitialized();
            foreach (var x in Container.Resolve<IEnumerable<IRunable>>())
                if (x is IRunable r)
                    r.Run();
        }


Тестированием не занимаюсь по причине отсутствия возможности.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[7]: WPF что актуально?
От: takTak  
Дата: 21.04.21 09:22
Оценка:
T>>я не до конца понял, что там у тебя за проблема, в unity была возможность "инжектить" экземляр класса в конструктор, dryioc я не смотрел;

AA>
AA>//InvalidOperationException: Нельзя создать более одного экземпляра System.Windows.Application в одном AppDomain.

AA>        protected override void RegisterTypes(IContainerRegistry containerRegistry)
AA>        {
AA>            var instance = new SuperService(this);

AA>            containerRegistry.RegisterInstance<IRunable>(instance, "IRunable");
AA>            containerRegistry.RegisterInstance<SuperService>(instance, "SuperService");
AA>            // ни так, ни так не работает :???:
AA>            Container.GetContainer().RegisterInstance<IRunable>("IRunable", instance, InstanceLifetime.Singleton);
AA>            Container.GetContainer().RegisterInstance<SuperService>("SuperService", instance, InstanceLifetime.Singleton);
AA>        }

AA>        protected override void OnInitialized()
AA>        {
AA>            base.OnInitialized();
AA>            foreach (var x in Container.Resolve<IEnumerable<IRunable>>())
AA>                if (x is IRunable r)
AA>                    r.Run();
AA>        }
AA>


AA>Тестированием не занимаюсь по причине отсутствия возможности.


это же совсем другая тема, помню, что была возможность через InjectionConstructor что угодно куда угодно вставлять,
если ты только containerRegistry.RegisterInstance<IRunable>(instance, "IRunable"); делаешь, то это работает?
Re[8]: WPF что актуально?
От: varenikAA  
Дата: 21.04.21 09:39
Оценка:
Здравствуйте, takTak, Вы писали:



T>это же совсем другая тема, помню, что была возможность через InjectionConstructor что угодно куда угодно вставлять,

T>если ты только containerRegistry.RegisterInstance<IRunable>(instance, "IRunable"); делаешь, то это работает?
Если один раз регить работает, но мне нужно получать разные интерфейсы, еще на сайте призмы пишут, что если Resolve<Type[]> то выдаст коллекцию с именовынными экземплярами,
Resolve<IEnum<Type>> должен выдать все. но у меня там пусто, только что видно через Container.GetContainer()
Использовал последнюю версию призмы.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[9]: WPF что актуально?
От: takTak  
Дата: 21.04.21 09:47
Оценка: 9 (1)
T>>это же совсем другая тема, помню, что была возможность через InjectionConstructor что угодно куда угодно вставлять,
T>>если ты только containerRegistry.RegisterInstance<IRunable>(instance, "IRunable"); делаешь, то это работает?
AA>Если один раз регить работает, но мне нужно получать разные интерфейсы, еще на сайте призмы пишут, что если Resolve<Type[]> то выдаст коллекцию с именовынными экземплярами,
AA>Resolve<IEnum<Type>> должен выдать все. но у меня там пусто, только что видно через Container.GetContainer()
AA>Использовал последнюю версию призмы.

это не prism, это реализация DI контейнера, ну если тебе надо зарегистрировать IEnumeration<IService>, ну так и зарегистрируй эту коллекцию как instance, жить она вроде будет по умолчанию до тех пор, пока будет жить само приложение

вот это гуглится для юнити : https://stackoverflow.com/questions/1961549/resolving-ienumerablet-with-unity
Отредактировано 21.04.2021 10:05 takTak . Предыдущая версия .
Re[10]: WPF что актуально?
От: varenikAA  
Дата: 22.04.21 01:37
Оценка:
Здравствуйте, takTak, Вы писали:

T>вот это гуглится для юнити : https://stackoverflow.com/questions/1961549/resolving-ienumerablet-with-unity


Спасибо! На свежую голову пошло!

protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            var first = new SuperService(this);
            var second = new SecondService(this);
            containerRegistry.RegisterInstance<IRunable>(first, first.name); //<= для резолва нужно имя
            containerRegistry.RegisterInstance<IRunable>(second, second.name);
            containerRegistry.Register<SuperService>(a => first); // <= использую фабрику для получения уже созданного экземпляра
            containerRegistry.Register<SecondService>(a => second);
        }

        protected override void OnInitialized()
        {
            base.OnInitialized();
            foreach (var x in Container.Resolve<IEnumerable<IRunable>>())
                if (x is IRunable r)
                    r.Run();
        }

        protected override void OnExit(ExitEventArgs e)
        {
            foreach (var x in Container.Resolve<IEnumerable<IRunable>>())
                if (x is IRunable r)
                    r.Stop();
       
            base.OnExit(e);
        }
    }
....
  public MainWindowViewModel(Services.SuperService service)
....
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.