Сохранен 495
https://2ch.hk/pr/res/2601326.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

C# thread #45 /csharp/

 Аноним 06/02/23 Пнд 17:53:47 #1 №2601326 
image
image
image
image
1. Ресурсы:
https://dotnet.microsoft.com/learn
https://ru.stackoverflow.com/a/416585/422180
https://metanit.com
https://professorweb.ru

2. С# для веб
https://docs.microsoft.com/ru-ru/aspnet/core

3. C# для десктопа
https://docs.microsoft.com/ru-ru/dotnet/desktop

4. С# для игр
https://ru.stackoverflow.com/a/609901/422180

5. С# для мобильной разработки
https://docs.microsoft.com/ru-ru/dotnet/maui

6. Годные ютуб-каналы
https://www.youtube.com/c/CODEBLOG
https://www.youtube.com/c/AndreyShyrokoriadov
https://www.youtube.com/c/DevJungles
https://www.youtube.com/user/Shmachilin

Шапка: https://pastebin.com/HT7Hi6FD
Прошлый тред: >>2582351 (OP)
Аноним 06/02/23 Пнд 17:57:28 #2 №2601336 
>>2599243 →
>Вообще. Я чет стал за 10 лет коммерческой разработки - каким-то хуйлом, если честно. Все чаще ловлю себя на мысли, что большая часть "правил", это какой-то карго-культ.
>
>Хороший код, это простой-понятный код, который решает задачу здесь и сейчас и который можно выкинуть нахуй, как только задача поменяется.
Я тоже спустя много лет пришёл к таким выводам.
Аноним 06/02/23 Пнд 18:23:24 #3 №2601364 
>>2601336
>который можно выкинуть нахуй, как только задача поменяется

Спустя 30 минут
@
Задача меняется
Аноним 06/02/23 Пнд 19:14:48 #4 №2601450 
>>2601364
Ну и выкинул код. Это ж просто. В этом и суть хорошего кода
Аноним 06/02/23 Пнд 19:24:40 #5 №2601461 
Джавадебилы смачно соснули с проглотом.
Аноним 07/02/23 Втр 13:28:56 #6 №2602118 
Что лучше для WPF в качестве хранения настроек: json или xaml?
xaml работает из коробки и можно заюзать прям Application.xaml, создающийся по-умолчанию. А json это больше для веб и asp.net.

Я видел как в ридер джейсона пихали класс и он как-то сам автоматом заполнялся. Это что-то из разряда сериализации?
Аноним 07/02/23 Втр 15:10:17 #7 №2602311 
>>2602118
смешались люди кони огурцы
xaml это не xml и с жсоном сравнивать нельзя

храни настройки как душе угодно.
Аноним 07/02/23 Втр 17:02:10 #8 №2602553 
>>2602311
>не xml и с жсоном сравнивать нельзя
я сделал опечатку. Почему нельзя сравнивать?
Аноним 07/02/23 Втр 17:15:33 #9 №2602581 
>>2602553
не было никакой опечатки ибо ты упомянул Application.xaml (который на деле App.xaml)

Нельзя сравнивать потому что xaml не является форматом данных. Это как спрашивать "в чем лучше хранить конфиг - в html или в json"
Аноним 07/02/23 Втр 17:39:52 #10 №2602619 
>>2602118
XAML (eXtensible Application Markup Language) - язык разметки, используемый для инициализации объектов в технологиях на платформе .NET.

Конфиги храни в json. Используй newtonsoft json из nuget.
Аноним 07/02/23 Втр 17:41:28 #11 №2602623 
>>2602619
зачем использовать эту либу, если в дотнете уже есть искаропочное решение?

да, ньютон мощнее по фичам....но это же просто конфиг.
Аноним 07/02/23 Втр 17:43:46 #12 №2602627 
>>2602623
Хз, я привык нютон использовать. Но в целом может и дефолтный парсер использовать. Не знаю у него можно отключить регистр при парсинге полей? Можно ли для дебага вывести json в виде отформатированной строки.
Аноним 07/02/23 Втр 17:53:05 #13 №2602646 
>>2602627
конечно.

new JsonSerializerOptions()
{
PropertyNameCaseInsensitive = true,
WriteIndented = true
}
Аноним 07/02/23 Втр 18:00:45 #14 №2602658 
>>2602581
На SO я видел ответ типа "не заморачивайся с джейсонами, храни настройки Application.xaml", но там выглядело как словарь, и чтобы получить свойство, нужно было ввести текстовый ключ. Т.е. уже это выглядит как неудобная хрень по сравнению с десериализацией в готовенький класс.

>в чем лучше хранить конфиг - в html или в json"
Я имел ввиду контекст удобства работы. Мб какой-то парсер имеет ограничения или еще что, или что-то делается одной левой пяткой.
Аноним 07/02/23 Втр 19:17:18 #15 №2602805 
>>2601822 →
Так это реальный кейс как раз с завода, чел.
Подключена куча устройств по всяким модбасам, хуясам, snmp, mqtt, куча хуйни через один модем который к ком-порту подключен. В среднем на объекте - 100-200к всяких устройств, это через которые идет опрос, к ним еще могут быть куча подключены, нужно получать данные со всего этого частотой не реже 1 секунды на каждое конечное. Нужно управлять этим делом и т.д.
Так вот. Если ты ставишь "архитектуру" выше стабильности работы и этих самых секунд- ты идешь нахуй. Это просто.
Попробуй, блин, добиться этого, а потом покажи, как будешь через PLC, COM, радио - делать абстрактне запросы, к абстрактным устройствам с абстратными чтецами.
Аноним 07/02/23 Втр 20:50:57 #16 №2602902 
>>2602805
ничего этакого ты не описал, самая обычная задача где ничего не мешает архитектурить. Ну или хз что ты подразумеваешь под словом архитектура.

>делать абстрактне запросы, к абстрактным устройствам с абстратными чтецами.

Я перечитал задачу. она?
"Система опроса с очередями. Логика была простой: устройство - воркер, воркер пытается опросить устройство, сохраняет результат опроса в базу. Все изначально просто - по TCP общаемся без особых проблем.
Ок. Все норм. 10к потоков спокойно опрашивают че там надо.
Теперь - у нас есть COM-порты, через один COM-порт подключено 2к устройств.
Давай, объясняй, как твой DI поможет решить проблему того, что нельзя пытаться открыть из разных потоков один и тот же COM-порт. "

DI решает проблему "не нужно ручками фабрики писать". Для одного конкретного случая это "ну зачем", но приложение обычно куда больше и количество РАЗВЕСТИТЫХ new ЧтоТо(new "nj...) прилично так растет и если все собрать в класс SuperFactory, то там будет много строчек. И при наведении там порядка получишь то, что за тебя сгенерит DI. Правда DI еще даст менеджмент временем жизни.

А если вопрос стоит "ну и как тут сделать с абстракциями" - ну тоже просто. общий воркер, IDevice и куча реализаций для каждого девайса. из разных потоков нельзя открыть - ну а как ты решаешь этот вопрос. вот тут так же. Архитектура не решает алгоритмы - она позволяет сделать код чище (чтобы ты работал с более высокими абстракциями), упростить сопровождение (добавление нового устройства ничего не сломает и возможно даже не нужно будет переписать ни строчки старого кода)

каждый ConcreteDevice не живет в вакууме. Есть какой нибудь контекст, который с ним ассоциируется, а уж там может быть общий семафор для ограничения конкурентного доступа, и контекст синхронизации для того чтобы в одном потоке жить. Ну или запилить "точки доступа" через которые и будут опрашиваться девайсы и уж там будет вся защита от толкотни и многопотока. И про конкретную особенность работы с конкретным физ девайсом будет знать только сам класс ConcreteDevice и более никто. Как бы системе похер COM порт там или баба зина - ей хватает знания "нужно выполнять в том же потоке и плевать кто это". Воркеру тоже похер - он получает данные и передает их бд.
Аноним 07/02/23 Втр 21:01:29 #17 №2602930 
>>2602658

Ничего ограничений не имеет. Кому что нравится. Студия поддерживает app.config где ты в редакторе набацал и она сама за тебя классы сгенерит. Ну и на себя возьмет разделение по юзерам. формат там хмл и руками править его ну нах. В общем то это для случаев когда конфиг редактируется в самом приложении.

ини - поддержки нет, ну можно через вызов неуправляемого кода. Тут самому пилить придется все остальное

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

Решение от мелких, то которое в новом асп - ну это классика, читаем многие файлы разных форматом, мержим их, мержим с переменными окружения и бац можем превратить в объекты а-ля десериализация жсон. для случаев когда конфиги правят именно ручками и они ридонли. ну и да - раз нет прямого чтения жсона то и не работают конвертеры (ниудобна)

Так что бери что хочешь. Ну да, кроме первого решения тебе придется ручками накодить классы (ну или сгенерить из жсона - есть такие генераторы) ну и написать много гетсет тупых чтобы поддерживала INPC, ну а свой ConfigurationManager это и в яслях напишут.
Аноним 07/02/23 Втр 21:16:49 #18 №2602943 
image
Шарпаны, когда начнём делать игры на Unity??? Долой энтерпрайз рабство!
Аноним 07/02/23 Втр 21:18:07 #19 №2602945 
Слушайте, а в консольном приложении .NET можно использовать EF Core? Всё подключил, но при попытке написания ApplicationDbContext ничего не происходит. Просто весит ошибка, что нет такой команды, при этом через using подключил всё
Аноним 07/02/23 Втр 21:19:45 #20 №2602949 
>>2602945
Можно конечно. Правда это ж EF - пожиратель памяти, но типа удобство (кому то)
Аноним 07/02/23 Втр 21:21:06 #21 №2602950 
>>2602949
Блять блин, опять что-то сломалось. Или я как-то сломал. Попозже пересоздам проект, мб опять что-то неправильно выбрал
Аноним 07/02/23 Втр 21:32:27 #22 №2602960 
Существуют ли учебные материалы для вката в мл на дотнете?
Аноним 07/02/23 Втр 21:48:56 #23 №2602981 
>>2601326 (OP)
Xamarin - норм тема, или лучше для проги на телефоны использовать более подходящие языки (Java/Kotlin)?
Аноним 07/02/23 Втр 21:52:35 #24 №2602992 
>>2602981
Если "норм тема" измеряется количеством вакансий, то нет.
Аноним 07/02/23 Втр 21:54:28 #25 №2602997 
>>2602992
Скорее удобством и возможностями
Аноним 07/02/23 Втр 21:54:58 #26 №2602998 
>>2602992
Скорее удобством и возможностями
Аноним 07/02/23 Втр 22:11:51 #27 №2603013 
.png
>>2602945
Можно!
Аноним 07/02/23 Втр 22:16:11 #28 №2603018 
>>2603013
ну походу у меня что-то поломалась в проекте
Аноним 07/02/23 Втр 22:20:26 #29 №2603023 
>>2603013
Бляяя опять ты
Аноним 07/02/23 Втр 22:21:13 #30 №2603024 
>>2603018
Посмотри файлик проекта. Там должно быть что-то в духе:

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.2" />
</ItemGroup>
>>2603023
В смысле опять? Я тут с вами всегда.
Аноним 07/02/23 Втр 22:29:30 #31 №2603032 
изображение.png
>>2603024
Это я уже смотрел - всё на месте. Ещё установил EF core в другой проект, тоже консольный и тоже не работает. Чё за параша
Аноним 07/02/23 Втр 22:32:12 #32 №2603039 
>>2603032
А restore для нугетов делал? Целевой фреймворк нужной версии?
Аноним 07/02/23 Втр 22:33:06 #33 №2603043 
>>2603032
>>2602945
Ну и вообще. Просто попробуй по гайду https://learn.microsoft.com/ru-ru/ef/core/get-started/overview/first-app?tabs=netcore-cli
Потом посмотри, чем у тебя отличается.
Аноним 07/02/23 Втр 22:35:12 #34 №2603054 
>>2603043
щас посомтрю. Просто на asp core всё работает, а на консолке что-то не пашет
Аноним 07/02/23 Втр 22:40:52 #35 №2603065 
>>2603043
Кажись нашёл в чем проблема. Я создаю обычное .NET, а нужно .NET Core, но у меня его нет в списке
Аноним 07/02/23 Втр 22:44:19 #36 №2603069 
>>2603065
Если ты про последние версии, котрые от 5 и выше. То теперь просто Core решили больше не писать, чтобы не путать людей.
Потому, теперь у нас есть:
.Net Framework
.Net Standard
.Net Core
И просто
.NET, который является Core просто без слова Core
Аноним 07/02/23 Втр 22:56:59 #37 №2603088 
изображение.png
>>2603069
Кароч у меня жопа сгорела))))) Завтра переустановлю Visual Studio. Ибо хз, что тут делать
Аноним 07/02/23 Втр 23:10:14 #38 №2603101 
>>2603088
При этом, когда пишу любую команду из EF ничего не работает. Пишет, что отсутсвует ссылка на сборку при том, что она есть
Аноним 08/02/23 Срд 01:25:09 #39 №2603174 
>>2603101
У меня так документ с кодом не видит документ с xaml, как будто второго не существует. Имеется ввиду два partial документа. Хз как это править, приходится удалять .vs и тогда пересобирается норм.

Мне бесит, что студия порой сама принимает решение и хер ты че ей объяснишь. На какой-то божьей сопле это все крепится.
Аноним 08/02/23 Срд 01:28:22 #40 №2603175 
>>2603174
А еще студия может с нихуя начать ругаться на комментарии в xaml, пишет, что содержатся запрещенные на территории РФ недопустимые символы. Фиксится пересозданием нового документа и копипастингом содержимого.
Аноним 08/02/23 Срд 07:07:23 #41 №2603224 
>>2603088
Какая версия студии у тебя?
Аноним 08/02/23 Срд 12:38:42 #42 №2603410 
Посоны, а где инициализировать вложенный класс, который просто содержит свойства, прямо в конструкторе? Но это же нарушит Dependency Inversion, а подавать его из фабрики - это какая-то хуйня.
Аноним 08/02/23 Срд 15:19:49 #43 №2603575 
>>2603410
Не заёбывайся, делай как проще.
Аноним 08/02/23 Срд 19:03:57 #44 №2603860 
ребят как сделать так, чтобы запросы на мой кастомный домен редиректились на мой azure app service? При этом мой ажур сервис мог получать редиректы только с мого конкретного кастомного домена, и на прямую или через редиректы с других доменов к нему обратиться было нельзя
Аноним 09/02/23 Чтв 08:09:06 #45 №2604296 
>>2603860
С доменчика сделать запрос к азуре? А чтобы другие не могли щемисться заведи секретный ключ, который азура будет чекать при получении запроса.
Аноним 09/02/23 Чтв 10:39:59 #46 №2604396 
photo2023-02-0818-28-21.jpg
photo2023-02-0818-28-04.jpg
Как сделать параметр в Swagger опциональным?
Скрины запроса в сваггере и скрин контроллера
Аноним 09/02/23 Чтв 12:00:25 #47 №2604488 
>>2604421
> Может есть у кого ссылки интересные?
Нужно побольше информации о Unity. Он сейчас очень сильно продвигает c# в геймдеве.
Аноним 09/02/23 Чтв 12:13:37 #48 №2604518 
>>2604488
Может быть ты вернешься в экстрим цоде со своим мемчиком про юнити?
Аноним 09/02/23 Чтв 13:37:28 #49 №2604629 
После разморозки резюме 3 недели назад создается впечатление, что новые в вакансии в .net только когда один из работающих разрабов пускает себе пулю в башку.
Аноним 09/02/23 Чтв 15:38:05 #50 №2604721 
ДЖАВА ГОРАЗДО ЛУЧШЕ, ЧЕМ ШАРП
Аноним 09/02/23 Чтв 15:56:21 #51 №2604738 
>>2604721
Ты не в ту сторону воюешь.
Аноним 09/02/23 Чтв 16:30:46 #52 №2604757 
>>2604518
> со своим мемчиком
Какие ещё мемы? Тебе 10 лет что ли?
Аноним 09/02/23 Чтв 16:36:34 #53 №2604761 
>>2604757
Юнити нахуй никому не всрался.
Аноним 09/02/23 Чтв 17:02:00 #54 №2604808 
Стикер
А теперь главный вопрос в WPF. Вот я хочу сделать окно с опциями, где предлагаю пользователю сменить цвет фона UI.

Даже если я устанавливаю биндинг как DynamicResource, то чтобы поменять цвет, я должен обратиться к ресурсу конкретного элемента, навроде this.Resources("MyButtonColor") = Colors.Orange;. И если у меня 100500 окон, я должен пройтись по всем окнам и у каждого отредактировать ресурсы. Потому что я не знаю как мне влезть в оригинальный файл ресурсов и поменять значение там. Все что я могу — это создать новый экземпляр ресурсов.

Даже та тема с SharedResourceDictionary проблемы не решает. Все что я нашел в сети: а нахуй тебе это нужно? Создавай еще один набор ресурсов. Что, реально в 2к23м можно оперировать только темами, но нельзя указать конкретный цвет?

Последняя моя идея заключается в том, что раз у меня MVVM, то создать экземпляр ResourceDictionary во вьюмодели, а потом биндить его на все окна. Хз как это будет работать, но есть прям отдаленные участки, куда рука вьюмодели по любому не дотягивается — придется передавать по цепочке как Owner Window.
Аноним 09/02/23 Чтв 17:22:16 #55 №2604826 
>>2604808
У тебя хроническое словарно-ресурсное заболевание. Будь твоя воля - ты бы и логику и базу данных в словарь ресурсов запихал.

у тебя есть конфиг любого вида - в нем хранишь цвет, все настраивамое биндится к этому конфигу. Изменение цвета в конфиге вызовет INPC биндингов и значение изменится.
Заодно и хранить в файлике можно
Аноним 09/02/23 Чтв 17:31:52 #56 №2604836 
>>2603013
> пик
Кривой аддон для анимедебилов не умеет в масштабирование. Классика.
Аноним 09/02/23 Чтв 17:33:51 #57 №2604838 
>>2604808
С вьюмоделью не прокатит, она поступает позже инициализации элемента.

>>2604826
>Будь твоя воля - ты бы и логику и базу данных в словарь ресурсов запихал.
В смысле? я делаю ровно то, для чего словари ресурсов якобы предназначены. Это то, что мне советовали применить, если есть куча стилей.

>у тебя есть конфиг любого вида - в нем хранишь цвет
Ок, у меня есть стиль кнопки. Как стиль получит цвет из конфига?
Аноним 09/02/23 Чтв 18:21:36 #58 №2604880 
>>2604838
>Даже та тема с SharedResourceDictionary проблемы не решает
ну вообще то позволяет добраться до всех словарей. у словаря можно менять данные. как об изменении уведомлять всех - хз. я словари не редактирую.

>Как стиль получит цвет из конфига?
<Setter Property="Background" Value="{x:Statin Settings.UI.FooBarColor}" />
или Binding если это INPC конфиг
Аноним 09/02/23 Чтв 18:29:00 #59 №2604888 
>>2604826
>>2604838
Короче, для теста создал статический класс с базовыми цветами, так сказать.

Далее в ресурсах я свой список базовых кистей сбиндил по типу
<SolidColorBrush x:Key='ActiveColor' Color='{Binding Source={x:Static L:BaseColorsSource.ActiveColor}}' />

Были небольшие траблы с биндингом к статическим свойствам. Теперь достаточно изменить свойства до запуска окон, и все обновится. Над ток все это согласовать с конфигом.
Аноним 09/02/23 Чтв 18:32:06 #60 №2604889 
>>2604880
Да, спасибо, так и сделал. Можно и без биндинга? Норм.
Мне надо только менять на стадии загрузки.
Аноним 09/02/23 Чтв 18:55:31 #61 №2604915 
>>2604889
>Можно и без биндинга?
Вообще тут смотреть нужно. Без биндинга по идее не будет изменений трекать после создания стиля (хотя и с биндингами ну будет только стиль меняться, а будут ли элементы где стиль применен - хз). Также еще если биндинг не OneTime и не INPC, то будет утечка. Но это ж если к свойству, а тут биндинг вроде ко всему объекту сразу.
Аноним 09/02/23 Чтв 19:16:19 #62 №2604933 
>>2604915
>если биндинг не OneTime
А какой тогда прок, если суть биндингов в реализации изменений в риалтайме?

У меня такая структура получилась:
- Статическое свойство хранит в себе экземпляр INPC-класса со списком всех базовых цветов.
- Далее ResourceDictionary имеет список экземпляров кистей, которые биндят цвета.
- А стили уже биндят эти экземпляры кистей. Я как-то для себя условился, что я не буду шатать экземпляры.
Аноним 09/02/23 Чтв 19:26:05 #63 №2604945 
>>2604933
Кстати, у меня и без DynamicResource произошло обновление цветов.
Ну понятно, что я меняю цвет в экземпляре одной и той же кисти, но кто инициирует перерисовку? И для чего тогда нужен DynamicResource?
Аноним 09/02/23 Чтв 19:34:42 #64 №2604956 
>>2604396
Чтобы оно было не обязательным - нужно указать значение по умолчанию.
Аноним 09/02/23 Чтв 19:42:31 #65 №2604963 
>>2604933
>А какой тогда прок, если суть биндингов в реализации изменений в риалтайме?
если ты делаешь обновляемый биндинг не к DP или INPC, то у тебя будет утечка памяти. Вместо подписки на PropertyChanged он там творит магию с PropertyDescriptor чтобы следить за изменениями и получается жесткая ссылка

А вот так
{Binding Source={x:Static L:BaseColorsSource.ActiveColor}}
получается биндинг на сам объект и как бы свойства нет и я честно не знаю как он тут следит за обновлениями

Это ж не
{Binding ActiveColor Source={x:Static L:BaseColorsSource}}
где все понятно.
Аноним 09/02/23 Чтв 20:24:43 #66 №2605003 
>>2604963
>если ты делаешь обновляемый биндинг не к DP или INPC, то у тебя будет утечка памяти. Вместо подписки на PropertyChanged он там творит магию с PropertyDescriptor чтобы следить за изменениями и получается жесткая ссылка

Ах, вот оно че? Обычно мне не дают привязать к свойству, если оно не DP или INPC, а словарь даже не задал вопросов.


>{Binding Source={x:Static L:BaseColorsSource.ActiveColor}}
>{Binding ActiveColor Source={x:Static L:BaseColorsSource}}
Отличие есть в VisualBasic. Дело в том, что там отсутствуют статические классы в принципе, можно делать только статические методы, поля и свойства.
Есть, конечно, Module, но это специфический тип.

Поэтому если статическим является ActiveColor, то правильным будет первый вариант, а второй выдаст ошибку.
Аноним 09/02/23 Чтв 20:26:37 #67 №2605007 
>>2605003
вместо спойлера выделил болдом
Аноним 09/02/23 Чтв 20:48:13 #68 №2605037 
Кто нибудь тут настраивал CI/CD для своей конторы?
Я не прошу советов. Я просто поныть хочу.
Вот чому это так сложно-то? Вообще, в такие моменты возникает мысль, что проще самому сделать. Пиздец.
Вот простая связка, гит-нексус-дрон, казалось бы. Пиздец сколько попоболи это все сделао. А ведь нужно еще чтобы масштабироваться.
Я просто хуею. Как же привык к тому, что у майков все из студии делается. Пиздец как не весело - ебаться с сертификатами, ебаться с конфигами жавовской хуйни, ебаться с безопасниками, которые втихаря подсирают, а узнаешь про это когда все перепробовал, и все вроде верно, а потом - ой, мы на тебе новую систему проверям))).
А так - вы няши. Я вас люблю. Надеюсь, вам - никогда не придется с этим ебаться самим, а прийдете на все готовое.
Аноним 09/02/23 Чтв 21:42:48 #69 №2605103 
Пацы, нужно хранить информацию о покупке. И там есть такая информация: тип валюты в ISO формате и количество валюты в единицах. Как эти поля правильно назвать:

- IsoCurrencyCode
- А вот тут как: CurrencyAmount | PriceInCents | PriceInCurrency
Аноним 09/02/23 Чтв 22:05:00 #70 №2605131 
>>2605103
У тебя в приложении юзаются какие-нибудь другие коды валют, кроме ISO? Если нет, достаточно CurrencyCode, без лишних уточнений, что ISO.
Единица какой-то валюты - это НЕ разменные денежные единицы, т.е. никаких центов, копеек и пенни, только доллары, рубли и фунты. Разменные единицы обозначаются дробной частью с точностью до двух знаков после запятой, там, понятное дело, никаких флоатов и даблов, только decimal.
Количество называй как хочешь, хоть CurrencyPrice, хоть CurrencyAmount, хоть CurrencySum.
Аноним 10/02/23 Птн 00:05:46 #71 №2605244 
image
>>2605131
Аноним 10/02/23 Птн 17:02:23 #72 №2606287 
2023-02-1016-53-14.png
Чет ваш жысон не такой уж и компактный.
Попытался сериализовать Color и ожидал на выходе HEX, вроде #FF34FF0C или 0xFF34FF0C (в идеале int, но и стринг сойдет)

В итоге он мне забубенил пикрилейтед, где каждый канал ARGB записывается в отдельный параметр, да еще зачем-то записал ScR и ему подобное, что является представлением того же R, к примеру.

Т.е. у макрософтовского сериализатора нет анализа своих же типов, для него Color — это какой-то нонейм. Ну и как адекватно с этим работать?
Аноним 10/02/23 Птн 17:24:10 #73 №2606331 
>>2606287
Использовать кастомный конвертер (с) ваш кэп
Аноним 10/02/23 Птн 17:25:06 #74 №2606334 
>>2606287
Итак, гуглим JsonConverter
Перекидывает на MSDN
Так что там?
Пишут "Выберите версию .NET"
Ага. Выбираем .Net6
Так шо там ебана? Экземпл, ну давайте скопируем
Ага, четам? Один из параметров имеет тип Utf8JsonReader
@
ОшибкаBC30668"Utf8JsonReader" является устаревшим: "Types with embedded references are not supported in this version of your compiler."

Спасибо .Net6
Аноним 10/02/23 Птн 17:27:55 #75 №2606341 
>>2606331
Там говной воняет. Ща поищу еще.
Аноним 10/02/23 Птн 17:32:48 #76 №2606350 
>>2606341
у тебя горячка

>где каждый канал ARGB записывается в отдельный параметр
и правильно сделал. он сериализовал поля, что в общем то сериализаторы обычно и делают. ваш кэп

>Т.е. у макрософтовского сериализатора нет анализа своих же типов
как раз анализ и позволяет сериализовать. другое дело нет встроенного конвертера для Color по очевидной причине - этот тип не встроенный, а сериализатор не должен тянуть за собой зависимость от всего на свете. (мелкие даже DataMember не поддерживают именно по этой причине)

и правильное и единственное решение - использование кастомного конвертера. Он для этого как бы и придуман и пишется за пару минут.

но ты поищи поищи
Аноним 10/02/23 Птн 17:34:39 #77 №2606354 
2023-02-1017-30-36.png
>>2606341
Ага, 2020 год. Ясно.
Как же хорошо, когда НЕ работает из коробки вот уже 3 год.
Аноним 10/02/23 Птн 17:36:23 #78 №2606357 
>>2606354
нууу тот кто выбрал визуал бейсик с его синтаксисом...очевидно любит сложности.
Пантеон 10/02/23 Птн 17:59:19 #79 №2606404 
image.png
Вкатываюсь в шарпы
Го подтверждать скилы друг друга на ликдине
https://www.linkedin.com/in/artur-ilinyh/
Аноним 10/02/23 Птн 18:11:42 #80 №2606420 
>>2606357
Короче, все примеры касательно джейсона для бейсика юзают Newtonsoft.

>нууу тот кто выбрал визуал бейсик с его синтаксисом
При чем тут синтаксис? Просто майкрософт забили хуй.

Вот и пришли к выводу, что выбрать. Посмотрю наскольк грузная эта либа, и наверно начну рассматривать вариант с xml.
Аноним 10/02/23 Птн 18:19:42 #81 №2606429 
>>2606420
>При чем тут синтаксис?
он уродский. и ладно бы не было альтернатив, но так шарп же
Аноним 10/02/23 Птн 18:34:53 #82 №2606452 
>>2606429
>он уродский
В шарпе тоже есть уродства, так что я на эти языки смотрю как на сорта говна.
Аноним 10/02/23 Птн 19:05:11 #83 №2606513 
А вообще.
Я тут погорел с того, что CI/CD сложно настраивать. И у меня мысля возникал.
Че если я просто на гитхабе залью dokcer-compose того что получилось, чтобы 1. Потом можно самому было брать. 2. Чтобы другие меньше страдали.
Связка какая: Gitea, Nexus Repository, Drone CI, Nginx. Хотя если никому не всралось - то и тратить время не буду. На работе - конфиги-то есть.
Аноним 10/02/23 Птн 19:07:06 #84 №2606516 
Уже весь инет перерыл, аноны, подскажите, как в uwp сделать анимацию как в navigationview? С голубым указателем, который выскакивает то снизу, то сверху в зависимости от позиции предыдущего выбранного элемента.
Аноним 10/02/23 Птн 20:31:45 #85 №2606621 
2023-02-1020-26-33.png
Кек. Newtonsoft.Json из коробки распознает Color и пишет hex. А еще можно пометить свойство, что это массив или словарь, пока искал свою проблему видел, что у Text.Json и для этого надо писать свой конвертер.
Аноним 11/02/23 Суб 08:33:44 #86 №2606976 
>>2606621
никто не спорит чть ньютонсофт более богатый по фичам
потому и более тяжелый и более медленный и более срет в душу GC

тут уж кому что важнее - фичи или скорость.
Аноним 11/02/23 Суб 11:57:59 #87 №2607167 
>>2606420
>Просто майкрософт забили хуй.
Ну таки да. Они его развивают по инерции и по принципу, чтобы было хоть что-то. Просто народ настолько уже привык к ньютонсофту, что многие родной майковский даже никогда и не пробовали за всю жизнь.
Они просто подождут еще несколько лет, купят его себе и встроят заместо своего собственного.
Аноним 11/02/23 Суб 12:06:05 #88 №2607182 
>>2607167
Чел, майковскую либу разрабатывает автор newtonsoft.
Аноним 11/02/23 Суб 12:16:41 #89 №2607191 
>>2606976
На хабре видел обзор. У ньютнсофта и майкрософтовского примерно сопоставимые скорости. Впереди там jet.
Аноним 11/02/23 Суб 13:16:01 #90 №2607233 
>>2607191
всех по скорости и по аллокациям всех порвет SpanJson

а так потребление памяти и скорости не равны. не знаю где ты там смотрел.
Аноним 11/02/23 Суб 14:48:16 #91 №2607360 
Правильно ли я понимаю, что для настроек надо хранить дефолтные неизменяемые настройки, и где нибудь в AppData хранить их редактируемую копию.

А в каком месте хранится оригинал? Я вот щас полазил по вским программам и не вижу копий данных в program files
Аноним 11/02/23 Суб 14:58:00 #92 №2607367 
>>2607360
Им не обязательно храниться отдельными файлами, можно хоть логикой в коде генерировать.
Аноним 11/02/23 Суб 19:28:58 #93 №2607726 
>>2607360
>А в каком месте хранится оригинал?
В том же где хранится твоя мамка.
Извини не удержался.
На самом деле и правда - там где хочешь. Где тебе наиболее удобно их будет менять при необходимости. Я обычно храню в виде дефолтных значений полей самих settings классов.
Аноним 11/02/23 Суб 21:56:26 #94 №2607863 
Пока гуглил про сохранения настроек, увидел такую интересную фишку то ли у IConfiguration, толи еще где,я тогда в голове зафиксировал сей факт и пошел дальше, типа загружается конфиг и если какой-то пунт по каким-то причинам не найден, то он подгружается из дефолтного конфига.

Начал искать эту тему заново, все уперлось в DependencyInjection, начал смотреть про DI, а там нужен паттерн AbstractFactory. Все как снежный ком начинает обрастать сложностями, что навело меня на историю одного товарища, который работал слесарем в одном Мухосранске. Короче там пытаются любую проблему, любую течь решить при помощи деревянного чопика, и когда течь начинает подмывать ранее установленный чопик, в этот чопик вбивают еще один чопик поменьше.

Почему в случае простых простых работяг это называют халтурой и безответственностью, а у программистов и математиков наукой?
Аноним 11/02/23 Суб 22:28:05 #95 №2607888 
Ребят, почему EF Core может не добавлять записи в БД(PosgreSql)? При первом обращении создаётся БД, но когда пытаюсь добавить запись - ничего не происходит. Ошибок никаких нет. По дебагеру отследил, что доходит до команд:
await _db.User.AddAsync(entity);
await _db.SaveChangesAsync();
И всё, ничего не происходит
Аноним 11/02/23 Суб 22:50:07 #96 №2607894 
>>2607888
>await _db.User.AddAsync(entity);
>await _db.SaveChangesAsync();
Оберни в try catch посмотри что за исключение.
Аноним 11/02/23 Суб 22:54:43 #97 №2607896 
изображение.png
>>2607894
Ok, а что за внутренне исключение и где его посмотреть?
Аноним 11/02/23 Суб 22:58:14 #98 №2607899 
изображение.png
>>2607896
Ой, я же просто сообщение вывожу.
Вот полная ошибка
Аноним 11/02/23 Суб 22:58:46 #99 №2607901 
изображение.png
>>2607896
Ой, я же просто сообщение вывожу.
Вот полная ошибка
Аноним 11/02/23 Суб 22:59:43 #100 №2607902 
>>2607899
Насколько я понял, то тут ошибка с датой. Щас пойду переделаю
Аноним 11/02/23 Суб 23:08:30 #101 №2607906 
>>2607902
Пофиксил всё вот этой строкой AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
Аноним 12/02/23 Вск 00:18:58 #102 №2607967 
>>2607906
теперь скажи нам спасибо. ведь если бы не мы, ты бы ничего и не добился.
Аноним 12/02/23 Вск 02:03:32 #103 №2608021 
Смотрю и логгирование и конфигурации — всё работает через DI. В ASP.net это работает из коробки, а в WPF надо плюс ко всему городить фабрику, чтобы тупо запускать окна при такой системе.
Аноним 12/02/23 Вск 02:19:21 #104 №2608033 
>>2608021
И? WPF - легаси говно, в 2023 году никому оно не нужно.
Аноним 12/02/23 Вск 03:08:11 #105 №2608063 
>>2608033
Это конечно хорошо, но давай мы будем подбирать инструмент под задачи, а не выдумывать задачи под инструмент. Прямо щас мне нужно сделать плагин для десктопного софта.
Аноним 12/02/23 Вск 07:04:40 #106 №2608099 
>>2608021
Какая у тебя каша в голове просто капец. На ровном месте находишь проблемы. НЕТ никаких рамок ни в WPF (который типа легаси) ни в asp.net по логгированию и конфигу. Тебе может быть предложено решение искаропки, но это не значит что "все атас другое сложно".
Если предлагается дефолтное решение - оно не значит лучше. Тот же DI от майков убогий (ни тебе декораторов, ни тебе условий, ни перехвата - НИХРЕНА) и его встроенность только мешает использовать более крутые DI, а решение по конфигу не дает использовать сложные типы в конфиге (кто там про Color жаловался - а вот хрен что он тут сделает без ручного пердолинга), логгинг как бы тоже на любителя ибо все равно прикручивается что то типа Nlog/Serilog. А дефолтный майкологгер даже в файл писать не может (ну да да, файл типа не нужен, ага ага, типа 12 правил ну да нуда))))

Городить ему что то блин надо. WPF это просто окна и биндинги смотрящие на DataContext - и все. Городи КАК УГОДНО.
Можешь взять стандартное решение по конфигу, можешь из ASP.NET (правда оно ридонли же), можешь хоть свое сделать за полчаса там сооружается банальное Load/Save -> Settings.Default.MyProp

Сложнее разве что из за наличия самого UI если тебе нужно красиво аснхронно что то типа IHostedService, ведь нужно же что то пользователю показывать что мол "не висит оно, а штатно запускается или выгружается" при старте и выходе, но опять же WPF тут не причем как бы. UI на то и UI

>>2608033
ну вот WINUI типа не легаси, Там что то другое в этом плане? ой нет ). Наверное потому что легасность WPFа в другом. Да и вообще легаси это понятие растяжимое - вон про тот же жсон типа легаси, но вот только его замена явно слабее по фичам. DI от майков тоже слабее - но "жричодали". Просто пошли другим путем, но это не значит что старые пути стали плохие. не стоит забывать про "фатальный недостаток". Как бы те же майки и кнопку пуск убирали, типа она легаси )))))))))
Аноним 12/02/23 Вск 08:11:21 #107 №2608102 
>>2607863
>а там нужен паттерн AbstractFactory
Нахуй такие сложности. Используй IOptions и не еби себе мозг.
Аноним 12/02/23 Вск 08:17:52 #108 №2608105 
>>2607906
Не, чувак, ты не пофиксил, ты просто подпер свой говнокод костылем и радуешься.
От слова Legacy ничего в твоем межушном нервном узле не зашевелилось? Ну или о том, что везде где это про этот способ пишут, приписывают, что пользоваться этим не стоит и оно нужно исключительно для того, чтобы какой-нибудь совсем старый говнокод не развалился при его обновлении.
Пиздуй читать как правильно хранить дату/время в БД, почему хранить их там в Kind:Local - это ублюдство и как правильно решать такие вопросы в EFCore и в постгресе.
Аноним 12/02/23 Вск 08:17:55 #109 №2608106 
>>2608102
1 IOptions тот который в ASP.NET - вообще крайне спорное решение. Противоречит принципу fail fast
2 Там в принципе нет сохранения настроек
Аноним 12/02/23 Вск 11:26:05 #110 №2608211 
>>2608099
>ибо все равно прикручивается что то типа Nlog/Serilog
Так они все работают по схеме DI. Мне и нужно для сохранения в файл.

>Городи КАК УГОДНО.
99% туторов по конфигурации и логгированию идут в контексте DI. Но учитывая объем сделанного, проще написать свой логгер и воркер с сеттингами, чем перелопачивать всё под DI.
В моей голове мысль, что раз все юзают через DI, то может не стоит использовать иначе? Примеров масса, с теми же подписками или биндингами, когда игнорирование правил может привести к утечке памяти.

>>2608102
>Нахуй такие сложности.
Ну я начал гуглить про DI, естественно большая часть описывается для ASP.net. Я начал искать примеры для WPF, и в одном туторе чел реализует DI и запускает mainWindow. А потом добавляет, мол "если вы захотите запустить из этого окна кучу других окон, то хуй вам. Для этого вы должны реализовать AbstractFactory для всех окон."

Как я понял, при такой системе любой пук оборачивается в сервис и запрашивается у хоста этих сервисов.
Аноним 12/02/23 Вск 11:40:33 #111 №2608235 
>>2608211
> Ну я начал гуглить про DI, естественно большая часть описывается для ASP.net. Я начал искать примеры для WPF, и в одном туторе чел реализует DI и запускает mainWindow. А потом добавляет, мол "если вы захотите запустить из этого окна кучу других окон, то хуй вам. Для этого вы должны реализовать AbstractFactory для всех окон."
https://www.youtube.com/live/AkJ52O3cgi0
Шапка для чего?
Аноним 12/02/23 Вск 11:45:09 #112 №2608245 
Раз уж тема зашла про свой собственный логгер. Как там устроен процесс записи в файл? В какой момент идет запись? При каждом запуске условног ометода Log шатается файл, или собирается в буфер и уже при закрытии приложения все сохраняется разом?

Первый вариант очень сильно шатает производительность и при асинхронности не гарантирует правильную последовательность записи событий. Но второй подход может не гарантировать финальную запись, тогда является ли отлов необработанного исключения 100% гарантией записи? Может ли приложение обмякнуть без жидкого пука на последок?
Аноним 12/02/23 Вск 11:50:26 #113 №2608252 
>>2608245
А еще при втором подходе засрется память.
Аноним 12/02/23 Вск 11:52:15 #114 №2608254 
>>2608235
Этот стрим я видел, да. Я по нему MVVM учил, но весь остальной "мусор" тогда проигнорил. Ща пересмотрю.
Аноним 12/02/23 Вск 11:55:49 #115 №2608263 
>>2608245
Все логгеры которые я видел пишут в файл сразу.
Опять же сорцы nlog и serilog есть на гитхабе. Возьми и посмотри как все устроено.
>Может ли приложение обмякнуть без жидкого пука на последок?
Конечно. Свет отключили и прощай все твои логи.
Аноним 12/02/23 Вск 12:07:42 #116 №2608291 
>>2608211
>В моей голове мысль, что раз все юзают через DI, то может не стоит использовать иначе?
DI настолько стал стандартом и настолько (относительно) прост, что написание собственной реализации, даже в промышленном коде - это норм. А вот неиспользование DI - вызывает большие вопросы.
Аноним 12/02/23 Вск 12:28:34 #117 №2608316 
2023-02-1212-25-52.png
>>2608235
Это какое-то расширение или так в старых версиях VS было? Я имею ввиду визуализацию цвета кисти в виде полосы. У меня в студии всегда был квадрат слева.
Аноним 12/02/23 Вск 12:49:48 #118 №2608351 
>>2608291
Ты бы знал сколько итераций переписывания испытал мой проект за эти полгода — просто потому что я получаю знания по ходу его написания. Но эти переписывания уже выглядят как акт бесконечной дрочки кода. Уместнее так называемое саморазвитие оставить для других проектов.
Это, конечно, мои проблемы.

Хорошо, когда ASP тебя ставит перед фактом на этапе загрузки шаблона, в WPF все более неочевидно.
Аноним 12/02/23 Вск 12:52:25 #119 №2608355 
>>2608351
>Хорошо, когда ASP тебя ставит перед фактом на этапе загрузки шаблона, в WPF все более неочевидно.
Зачем ты учишь и то и то?
По моему найти сейчас вакансию, где бы использовались оба фреймворка тот еще квест.
Аноним 12/02/23 Вск 13:08:51 #120 №2608375 
>>2608316
Решарпер
Аноним 12/02/23 Вск 13:09:15 #121 №2608376 
>>2608355
Я учу только WPF, и профессия у меня другая.
Я вообще десигнер и пишу плагин для своего графического пакета. Формально, я могу забить хер на все эти правила — имею право, но раз начал, то хочется совсем уж не говнокодить.

А начинал я проект с Windows Forms, потом мне понадобилась графика и прозрачный фон — я перешел на WPF, потом когда говнокод разросся, пришлось переписывать на MVVM. Щас гуглю про конфиги и логгирование и упираюсь в DI, которое при гуглении тыкает носом в ASP.
Больше никакой связи с ASP, собсно, и нет.
Аноним 12/02/23 Вск 13:50:56 #122 №2608418 
Приветик.
Вот хочу попробовать сделать приложенице с помощью WPF, но есть вопросик. Вот мне нужно переключенице между вкладочками как, например, в сиклинерчике, ну или в стимчике. Это реализовывается с помощью страничек или по-другому? Просто во всех говногайдиках делают одностраничные приложеница и нихуя не понятно.
Аноним 12/02/23 Вск 14:40:00 #123 №2608497 
>>2607967
Спасибо
Аноним 12/02/23 Вск 14:41:01 #124 №2608502 
>>2608418
>приложенице
>вопросик
>вкладочками
>стимчике
Второй дизайнер в треде и один анимэшник. Куда делись программисты?

>Это реализовывается с помощью страничек или по-другому?
Тебе краткий путь или долгий?
Краткий: делай как тебе удобно. Ты можешь поместить содержимое куда угодно, хоть в Grid, и даже в кнопку — в этом суть WPF. Есть тонкости, о которых лучше узнать по ходу, чем забивать себе голову сейчас. Page это весьма специфический контрол.

Долгий: скорее всего тебе придется узнать про такие темы, как:
- Bindings, потому что на твоих страницах скорее всего будет куча элементов, которые нужно как-то связать либо между собой, либо с базой данных.
- Паттерн MVVM, чтобы не ебстись с привязкой кучи данных вручную
- XAML Styles, чтобы нарисовать няшные вкладочки.
Потому что вопросик-то у тебя простенький, но за ним спрятаны нюансики.

>Просто во всех говногайдиках делают одностраничные приложеница и нихуя не понятно.
А в гайдиках получше, гайдиков штук десять и все длинной по 4 часа.
Можешь начать https://youtu.be/uMNYu0p3MP4?list=PL-p05fYs48r-HOAA4_5qZfS0rTIka3fgc
Но сперва накидай хотя бы рыбу своего приложеньица.
Аноним 12/02/23 Вск 14:53:41 #125 №2608524 
>>2608211
>Так они все работают по схеме DI
чушь. ты должен где то сконфигурить и как то получить там где используешь
в Nlog вообще нет проблем доставить логгер на нужное место

>99% туторов по конфигурации и логгированию идут в контексте DI
элементарно пишется использование на коленке

>что раз все юзают через DI, то может не стоит использовать иначе?
DI удобен как автофабрика. так что почему бы не использовать.
и он прост как валенок. Хотя конечно сидеть на стульях "мы хотим создавать вьюмодели внутри других вьюмоделей и в то же время не иметь там контейнер" сложновато

>>2608245
как сконфигуришь логгер так и будет.
Аноним 12/02/23 Вск 15:06:09 #126 №2608552 
>>2608524
>элементарно пишется использование на коленке
Но не элементарно интегрируется в существующий проект.

Наверно я пока еще не осознал до конца суть DI. Я видос досмотрю, который анон выше скинул, потмо сделаю выводы.
Аноним 12/02/23 Вск 15:14:14 #127 №2608563 
>>2608552
Суть DI ты понимаешь
Тебе сложно использовать контейнер, ведь контейнер не должен быть везде чтобы не быть сервис локатором. И тут в mvvm сложнее, ведь одни вьюмодели порождают другие, те еще свои. И там время жизни разное ведь это не асп где время жизни запрос.

А примеры сплошной примитив.
Аноним 12/02/23 Вск 15:33:12 #128 №2608587 
>>2608105
Какой ты вредный, н за совет спасибо. Переделал немного сущность user. Теперь заместо DateTime использую DateOnly, а добавляю так: DateOnly.FromDateTime(DateTime.UtcNow. Теперь работает без той заглушки
Аноним 12/02/23 Вск 16:08:37 #129 №2608634 
>>2608587
>Какой ты вредный
Но совет то дал же.

На самом деле в EF можно еще добавить кастомный ValueConverter на уровне контекста, который будет все приходящие ДатыВремя автоматом переводить в Utc перед записью в базу и/или после вытаскивания их оттуда. И тогда вообще забыть о таких заморочек и просто подразумевать, что все что у тебя в коде крутистя всегда в Utc
Аноним 12/02/23 Вск 16:55:28 #130 №2608695 
>>2608502
> рыбу
Бля, последний раз слышал это слово в таком значении от своего препода в вузе. Тоже к слову был шарпистом.
Аноним 12/02/23 Вск 17:01:03 #131 №2608702 
>>2608695
А как надо писать, чтобы выглядеть современно? "Накидай рыбов"?
Аноним 12/02/23 Вск 17:04:41 #132 №2608710 
>>2608702
Можно просто написать скелет. Ясно и понятно.
Аноним 12/02/23 Вск 17:36:51 #133 №2608770 
изображение.png
Здрасьте, вижуал студия на винде словила заеб - при создании консольного проекта (.net 6/7) создает папку и не загружает решения. В папке проекта есть только файл Program.cs и ProjectName.csproj. При попытке загрузить .csproj выдает пикрил.
В интернете на вскидку пока ничего не нашел по делу. Восстановление студии в инсталере не помогло. Инстанс студии загружал с админа. У кого-то подобное было?
Аноним 12/02/23 Вск 18:26:49 #134 №2608852 
>>2608770
Список установленных SDK покажи
Аноним 12/02/23 Вск 20:00:26 #135 №2608941 
Посмотрел код community.toolkit для uwp, а там лютейший говнокод. Не ожидал от майков.
Аноним 12/02/23 Вск 20:03:14 #136 №2608944 
>>2608941
Майки - прославленные говнокодеры.
Аноним 12/02/23 Вск 20:10:24 #137 №2608951 
>>2608941
А ты всегда как на выставку пишешь? То что тебе не нравится необязательно говнокод. Если
0. Работает
1. Читабельно
2. Поддерживается
3. Развивается
то это просто обычный код, а не для того чтобы дядя Боб похвалил или очередные хипстеры, в зависимости от того какая у тебя референтная группа.
Аноним 12/02/23 Вск 20:25:18 #138 №2608975 
>>2608951
> 0. Работает
Работает то работает, но нет базовых функций, давно реализованных в сторонних либах.
> 1. Читабельно
Мимо. Почти нет комментов, функции внутри методов и тд. Пиздос полный.
> 2. Поддерживается
Переменные с именами V, U, v, u...
> 3. Развивается
Последняя обнова в ноябре 21 года... Для малейшего изменения логики приходится все переписывать с нуля, чем я сейчас и занят.
Аноним 12/02/23 Вск 22:20:20 #139 №2609105 
В DI я не понял одного: а кто главный? кто создает движуху? Кто инициирует чтение данных из файла во вьюмодель, кто запускает окно и передает вьюмодель интерфейсу?
Аноним 12/02/23 Вск 22:27:44 #140 №2609123 
>>2609105
Сам фреймворк, очевидно.
Аноним 12/02/23 Вск 22:36:08 #141 №2609138 
Деды, глядите, что там хипстеры напридумывали:
https://www.youtube.com/watch?v=IXRGa5m-Lbo
Аноним 12/02/23 Вск 22:47:55 #142 №2609158 
>>2609123
А это кто такой?
Аноним 12/02/23 Вск 23:13:10 #143 №2609187 
>>2609158
ASP и точка.
Аноним 12/02/23 Вск 23:25:43 #144 №2609197 
>у студента что-то не работает
>DI оказывается дотационный
>премудрости MVVM
>разметка окна в WPF

Не перестаю проигрывать с этих животрепещущих тем. И после этого "джава хуевая, потому что медленно развивается и там сплошное легаси". Ага, то ли дело у нас, у шарпистов: ехало мввм через впф. Хорошо, хоть фанатам формочек хватает самоиронии, чтобы не скатывать тред в обсуждение премудростей биндинга лист бокса к коллекции объектов.
Аноним 12/02/23 Вск 23:35:34 #145 №2609203 
>>2609187
>>2609197
Ты такой охуенный, как и джава, но почему ты здесь? Разве ты не тратишь время на серьезные задачи?
Аноним 12/02/23 Вск 23:37:09 #146 №2609205 
>>2609203
Выходные.
Аноним 12/02/23 Вск 23:46:21 #147 №2609212 
>>2609205
Выходные только у быдла. Смотри, а то опустишься до формочек.
Аноним 12/02/23 Вск 23:47:51 #148 №2609214 
>>2609212
Какие проблемы с формочками?
Аноним 13/02/23 Пнд 00:01:19 #149 №2609230 
>>2609214
Разве это достойно серьезной задаче? Кстати, какие задачи решают настоящие джависты?
Аноним 13/02/23 Пнд 00:14:24 #150 №2609239 
>>2609230
Все бэкендеры делают одно и то же: грузят жсоны в базу.
Аноним 13/02/23 Пнд 00:15:11 #151 №2609240 
>>2609105
Так, вроде начинаю въезжать. Каждый сервис требует набор каких-то других сервисов, поэтому они начнут существовать как только это кому-то понадобится. Если окну нужны данные из файла, то он запросит сервис данных и тот инициализируется.
Аноним 13/02/23 Пнд 00:17:05 #152 №2609241 
>>2609230
Сидят итт под кроватью и тролят шарпистов?
Аноним 13/02/23 Пнд 00:27:35 #153 №2609244 
>>2609240
Короче, тут главное на стадии инициализации четко обозначать какие еще сервисы нужны конкретному сервису. Но чет мне подсказывает, что очень легко зафакапиться.

К примеру у меня пока нет никакой защиты от того, что ресурсы стилей начнут тащить данные базовых цветов из статического класса (как я упоминал раньше). А тащить он начнет как только загрузится первое окно.

Наверно этот класс надо сделать еще одним сервисом, который требует сеттинги. Легко сказать, но это статический класс, а ресурсы лезут прямо в свойства этого класса. Никакой инициализации по сути там и нет.
Аноним 13/02/23 Пнд 00:28:30 #154 №2609245 
>>2609241
Разве это достойно — бисер перед свиньями метать?
Аноним 13/02/23 Пнд 00:38:02 #155 №2609249 
Стикер
>>2609197
Почему ты проецируешь лично мои локальные проблемы на всех шарпистов? Ты ебанутый?
Аноним 13/02/23 Пнд 04:18:27 #156 №2609308 
>>2608502
Спасибо за ответ.
> MVVM
На первый взгляд выглядит как просто усложнение кода. Мб, если столкнуться с проблемами, которые решает мввм, то я передумаю. Но сейчас, те плюсы, которые дает этот паттерн, мне особо не нужны. Мне, по сути, требуется 5 вкладок в одном окне, по которым можно переходить по кнопкам из шапки. Что-то вроде tabcontrol, но его я использовать не хочу. Пока что думаю страницы впихивать во фрейм.
Аноним 13/02/23 Пнд 07:17:27 #157 №2609329 
>>2609244
>Никакой инициализации по сути там и нет.
Статический конструктор?
Аноним 13/02/23 Пнд 08:41:08 #158 №2609351 
>>2609105
MVVM фреймворк или ты сам. Сделать в App.cs new MainWindow() - а почему нет.

>>2609240
>Если окну нужны данные из файла,
окну не должны быть нужны из файла, они нужны вьюмодели, которая и содержит данные для отображения. вьюмодель же, в свою очередь, попросит их у модели)
Аноним 13/02/23 Пнд 11:33:03 #159 №2609504 
>>2608418
TabControl, где каждая вкладка View. И mvvm не забудь.
Аноним 13/02/23 Пнд 12:29:39 #160 №2609550 
2023-02-1312-14-36.png
>>2609308
>На первый взгляд выглядит как просто усложнение кода.
Зависит от сложности контента на твоих страницах. Если там полторы кнопки, то не нужно, а если у тебя куча данных, особенно списки всякие, да еще и общие — чтобы изменив в одном месте автоматом поменялось в другом, то без MVVM будешь городить пикрилейтед.

>Пока что думаю страницы впихивать во фрейм.
Фрейм изолирует контент. Опять же, если ты не будешь юзать биндинги, а делать в лоб, то разницы вообще никакой. Тот же Grid делает ровно тоже самое, разве что там нет стрелочек навигации, которые ты первым делом и отключишь.
Аноним 13/02/23 Пнд 12:53:51 #161 №2609580 
>>2609308
Не усложнение, а структуризацию
Даже без MVVM крайне глупо закатывать солнце вручную и не юзать биндинг
а уж поверх биндинга это логическая надстройка как и MVC, то есть "где что лежит"

по факту даже в мелких приложухах часто проще добавить классы с INPC, а не делать спагетти. А потом родится и класс ViewModelBase и RelayCommand что проще копирнуть в новый проект чем писать по старому

Даже если у тебя один таб контрол - даже там удобнее.
Аноним 13/02/23 Пнд 13:24:45 #162 №2609599 
1123.jpg
>>2609351
>окну не должны быть нужны из файла
Да не, у меня там менеджер окон (в новых реалиях будем называть это сервисом окон). Раньше он при инициализации обращался к сервису чтения данных и получал экземпляр вьюмодели, а потом распихивал её в датаконтексты окон.

Пикрил — схема моего проекта.
Есть три вьюмодели. Если проводить параллели с Visual Studio, то главная вюмодель — решение. Внутри решения список дочерних вьюмоделей — проектов. Внутри каждого проекта есть дочерняя вьюмодель в виде иерархии элементов.

Пока что у меня вьюмодели больше выглядят как контейнер данных, а не сервис.
Аноним 13/02/23 Пнд 13:55:41 #163 №2609633 
>>2609308
>На первый взгляд выглядит как просто усложнение кода

На самом деле, упрощение поддержки за счет отсутствия прямой зависимости между моделью и вьюхой (ну и небольшой профит в предсказуемости связей).
Достаточно актуальный на сегодня кейс: представь, что тебе нужно сделать с проектом (который изначально на WPF), чтобы он заработал на Linux, потому что немалая часть заказчиков начала перекатываться. С MVVM ты заменяешь слой вьюх и, если не повезет, придется поправить биндинги в VM
Аноним 13/02/23 Пнд 14:54:26 #164 №2609690 
>>2609599
главное чтобы твоя логика не была в code-behind окон
и окна напрямую не лезли в модель, а через вьюмодель
(вид не должен знать чего как - он транслирует хотелку вьюмодели и отрисовывает изменение состояния). Вот и весь MVVM
очень простая концепция.

и ты правильно описываешь параллеи
и так то вьюмодели больше и есть контейнер данных для отображения. Вообще конечно во вьюмоделях и команды есть, но по хорошему они должны быть как тонкие контроллеры. Или даже отдельно сделать контроллеры ибо вьюмодели очень любят быть жирными из-за этого
Аноним 13/02/23 Пнд 15:45:50 #165 №2609758 
изображение.png
изображение.png
Всем ку, подскажите, пожалуйста, почему я не могу получить лист, который закешировал с помощью IMemoryCache. В том классе, где производилось кеширование - данные могу получить, а в других классах не могу. Подозреваю, что я что-то не так делаю или что-то не так понял. На первом скрине кеширую и получаю данные, а на втором уже пытаюсь получить данные из Program.cs. Собственно, получаю нуль, ибо там ничего нет, почему так?
Аноним 13/02/23 Пнд 15:47:26 #166 №2609760 
>>2609758
ого, удачно ошибка замазала телеграм токен
Аноним 13/02/23 Пнд 17:02:08 #167 №2609864 
Такая тема:
Необходимо подключить консольное приложение (как пример), к Prometheus, чтобы тот забирал метрики и выдавал, условно, "температура". Знаю, что такое можно делать с ASP.Net через подключение соответствующих библиотек, потом давать доступ в конфиг прометеусу и он уже будет сам все подсасывать. Но проблема заключается в том, что начальник хочет посылать топики в MSQTT, тот в свою очередь (как я понял) в прометеус. Я не совсем понимаю, как это реализовать, в инете говорят про умный дом, либо esp'шки всякие.
В моем же случае, это: Стенд -> запросы на сбор конкретных метрик -> MSQTT -> Prometheus.
Может кто знает толковую статью или пример проекта? Буду очень благодарен. Если что-то не ясно пояснил - извиняюсь заранее, сам с трудом понимаю, что от меня хотят и что учить.
Аноним 13/02/23 Пнд 18:18:29 #168 №2609986 
>>2609758
Ты пишешь кеш в MemoryCache который создал через AddMemoryCache() и прокинул в services, а получить пытаешься из нового: считай записал в один Dictionary, а читаешь из другого.

Тебе надо либо через GetService получить этот конкретный мемори кэш там же где ты пишешь, либо в сервис эту логику вынести и автоматом получать через конструктор как на пике 1.
Аноним 13/02/23 Пнд 19:47:46 #169 №2610100 
temple-photo.jpg
>>2608852
Установленные sdk вообще не выводились, хотя я уже руками качал .net sdk и ставил. Короче оказалось что при установке в системные переменные среды в Path оно записывает два пути к х86 и затем к x64 версии. Нужно было х64 поднять приоритетом вверх и ребутнуть пеку. Спасибо анон.
Аноним 13/02/23 Пнд 20:54:39 #170 №2610169 
как делать стартапы на ASP.NET и MAUI?
Аноним 13/02/23 Пнд 20:56:19 #171 №2610173 
>>2610169
берешь идею, реализовываешь на какой-то дотнет технологии, деплоишь на хостинге, продвигаешь в поисковиках, монетизируешь, получаешь деньги
Аноним 13/02/23 Пнд 21:06:45 #172 №2610191 
>>2610169
Никак, Startup.cs больше нет в 7 дотнете.
Аноним 13/02/23 Пнд 21:53:58 #173 №2610245 
uKNxZmt4L-W410e4C5BmEw.jpg
https://www.youtube.com/watch?v=-1dTA2LDZ9w
Аноним 13/02/23 Пнд 23:17:38 #174 №2610309 
2023-02-1323-11-33.png
2023-02-1323-12-20.png
Объясните как чел делает стиль для Window и у него не возникает ошибки? Ведь применяет он стиль не к Window, а к производному классу CV19.TestWindow

У меня была ровно та же проблема и на SO писали, что надо переопределять стиль под новосозданный класс. А у автора даже Path в свойстве Style прописался и не задал вопросов.
Аноним 13/02/23 Пнд 23:26:30 #175 №2610318 
>>2610309
А, ясно это не будет работать только для применения стиля по типу, а не по ключу (хотя мне казалось, что я так пробовал).
Аноним 14/02/23 Втр 01:33:17 #176 №2610378 
>>2609550
>Фрейм изолирует контент. Опять же, если ты не будешь юзать биндинги, а делать в лоб, то разницы вообще никакой. Тот же Grid делает ровно тоже самое
А как в таком случае? Делать много гридов в одном окне и просто их скрывать? Да, я тупой, это можно не сообщать.
Аноним 14/02/23 Втр 03:47:02 #177 №2610399 
6a97628144034eac8f320d60ef256ac9.jpg
>>2610378
>Да, я тупой
Ты не тупой, просто неопытный. Все задавали ровно те же вопросы.

>Делать много гридов в одном окне и просто их скрывать?
Во-первых, в окне ты можешь создать только один элемент. Каждый UI-элемент может (должен) содержать в себе контент в виде других элементов, но есть те, которые могут содержать только один элемент, к примеру это Window, Frame, Border, Button. А есть элементы, которые могут содержать в себе коллекцию, типа Grid, StackPanel, DockPanel, Canvas, ListView.

Поэтому ты не сможешь в Window положить кучу гридов (можешь сам проверить), зато ты можешь в Window положить один грид, а внутрь грида положить хоть сотню страниц. Собсно, в стартовом шаблоне, внутри Window помещен Grid именно по этой причине.
Так же и с Frame, если тебе надо положить туда 10 страниц одновременно, то ты во Frame сперва помещаешь Grid, а уже в этот Grid свои 10 страниц.

WPF это чистейшая матрешка. Ты можешь в кнопку поместить StackPanel, а внутрь этой панели поместить кучу страниц.


Во-вторых, ты сам выбрал себе этот "легкий" путь, кек. Поэтому да, вот такие кривые вещи тебе придется делать и ломать голову.
По поводу твоей пробелмы:
1й вариант.Ты можешь опять же в грид запихнуть все свои страницы разом и потом попеременно включать видимость нужной.
2й вариант. Ты можешь хранить список страниц в коде, а потом брать страницу из этого списка и помещать ее в контейнер. Не обязательно в грид, а точнее в этом случае нахер тут не нужен. Возьми любой контейнер, поддерживающий только один элемент, к примеру Border. Тогда замена содержимого будет выглядеть как-то так:
MyBorder.Child = MyPages(2);

Ну и навалил же я кучу, только запутал. Пожалуй остановлюсь, ибо дохрена чего еще.
Аноним 14/02/23 Втр 03:57:58 #178 №2610400 
>>2610399
>MyBorder.Child = MyPages(2);
Бля, забыл, что это шарп.
myBorder.Child = myPages[2];
Аноним 14/02/23 Втр 05:23:45 #179 №2610405 
Как в свой usercontrol, который служит шаблоном для listview, передавать данные? Создать список вьюмоделей во вьюмодели представления, и в самом представлении установить их в как источник данных?
Аноним 14/02/23 Втр 07:34:03 #180 №2610421 
>>2610405
непонятна твоя проблема
обычно к списковому контролу биндится коллекция к ItemsSource и в DataTempate итевом автоматически попадает нужный элемент этой коллекции как DataContext
Аноним 14/02/23 Втр 08:33:21 #181 №2610447 
>>2610100
>Установленные sdk вообще не выводились, хотя я уже руками качал .net sdk и ставил.
Ты в курсе, что в инсталлере студии есть вкладка с доп. компонентами, через которые можно поставить любой нужный sdk и runtime, плюс еще дохрена всяких приблуд. Я уже лет 5 ничего руками не докачивал и не ставил, только через инсталлер.
Аноним 14/02/23 Втр 08:38:07 #182 №2610450 
>>2610399
Спасибо за ответ, завтра попробую сделать что-нибудь.
Аноним 14/02/23 Втр 08:42:05 #183 №2610453 
>>2610450
вообще смену контента делают через ContentControl если конечно тебе не нужно хранить фокус где то внутри страницы при переходе вперед и назад.

а Frame - для мазохистов.
Аноним 14/02/23 Втр 10:06:50 #184 №2610496 
>>2610495
еще бы моки с таким подходом
но где где - везде сплошные "давайте интерфейс/virtual"
Аноним 14/02/23 Втр 12:02:25 #185 №2610617 
>>2610453
>вообще смену контента делают через ContentControl
Ну да, кстати.
Аноним 14/02/23 Втр 12:10:41 #186 №2610631 
>>2610617
А еще внезапно TabControl пересоздает же вьюхи при переходе. и все фокусы летят в одно место. И нужно гуглить спец реализацию без пересоздания

А еще Popup по факту Topmost=true, хотя непонятно зачем. И опять же нужно юзать кастомные реализации

это ж мелкие - они умеют делать говно.
Аноним 14/02/23 Втр 12:32:32 #187 №2610674 
>>2610631
>А еще Popup по факту Topmost=true, хотя непонятно зачем.
Я при помощи него делал выпадающую шторку как в смартфонах и контекстное меню по ЛКМ. И там не надо морочиться с автоскрытием по клику за пределами формы, что нетривиальная задача с опцией AllowTransperency.
Аноним 14/02/23 Втр 12:37:15 #188 №2610683 
Скинули тестовое задание
@
Весь день настраиваешь ему окружение
@
Всю ночь пытаешься сбилдить
@
НЕ СОБИРАЕТСААААА!!!!!!!!111

(Нугет не находит пакеты, которые хз откуда брать)

Финиш )
Аноним 14/02/23 Втр 12:42:57 #189 №2610690 
>>2610683
Вообще есть ли смысл обратно вкатываться в ынтырпрайз на Шарпе, если последние года 3 винду видел только на картинках?
Дали тестовое - все норм, код понятный, что делать - тоже понятно, но где брать сраные библиотеки, которые он требует при сборке - хз. Сижу под vscode с плагинами С# и vscode-solution-explorer. Плачу над проебанным на все это днем (((
Аноним 14/02/23 Втр 13:20:42 #190 №2610765 
>>2610683
прибежали в избу дети
второпях зовут отца
тятя! тятя! нет в нугете
и не собираетса!!!

если их нет в нюгете значит они либо рядом лежат как длл
Аноним 14/02/23 Втр 14:37:13 #191 №2610877 
16763048994530.jpg
>>2610690
>Дали тестовое
Аноним 14/02/23 Втр 15:02:07 #192 №2610918 
>>2610765
Не было. Качал по названиям либ, подключал вручную. Вроде норм теперь. Но авторы, конечно, могли бы хоть намекнуть, где их искать.
Аноним 14/02/23 Втр 15:03:00 #193 №2610920 
>>2610877
А что не так? Иду на позицию джуна, собеса еще не было.
Аноним 14/02/23 Втр 15:08:02 #194 №2610931 
4352d137f7a645ee0e99a80bac231e4f.jpeg
>>2610920
И не будет.
Аноним 14/02/23 Втр 15:38:15 #195 №2611020 
2023-02-1415-17-34.png
>>2609690
> Вообще конечно во вьюмоделях и команды есть
Так и есть у меня. Всегда считал команды частью вьюмодели, но тут смотрю восьмой стрим Шмачилина и вижу пикрилейтед. Он создает команду, где внутри создает экземпляр окна. Разве так можно?

Я делал так. У меня была аналогичная задача с выводом окна настроек по команде. Что я делал? Я во вьюмодели создавал событие что-то уровня "RequestShowSettings" и все что делала команда — это вызывала событие и её вообще не волновало есть ли окно или нет. А вот само окно настроек когда принимало вьюмодель, искало данное событие и если находило, то подписывалось на него.

Ну вот как бы я так решил проблему, а тут оказывается не зашквар пихать вью во вьюмодель.
Аноним 14/02/23 Втр 15:53:37 #196 №2611064 
>>2611020
> Разве так можно?
судя по всему он использует их в xaml напрямую. То есть это особые команды. так можно.

во вьюмоделях он использует LamdaCommand что еще называют RelayCommand/DelegateCommand

А вот CollectionViewSource во вьюмоделях уже неправильно.
ведь в отличие от INPC он лежит в сборке вида System.Windows.Data
Аноним 14/02/23 Втр 16:35:08 #197 №2611138 
>>2610683
Ты провалил проверку на софтскилы. Вместо того чтобы просто спросить "где пакеты брать, бля ?", ты сидишь и дрочишь в углу, пытаясь самостоятельно решить проблему и теряя время.
Аноним 14/02/23 Втр 16:43:31 #198 №2611145 
2023-02-1416-40-29.png
Почему автор хранит во вьюмодели экземпляры страниц и как вообще хранить страницы, каждая из которых по сути уникальная? Нужно под каждую страницу создавать свою модель?
Аноним 14/02/23 Втр 17:04:49 #199 №2611172 
>>2611145
на пике вообще не MVVM, что впрочем и не утверждается
Аноним 14/02/23 Втр 17:09:43 #200 №2611177 
2023-02-1417-08-41.png
>>2611172
Утверждается в заголовке, хотя тутор делал какой-то школьник.
Аноним 14/02/23 Втр 17:27:05 #201 №2611197 
>>2611177
ну значит автор не разбирается

А в чем проблема создать под уникальную страницу свою уникальную вьюмодель?
Аноним 14/02/23 Втр 17:48:08 #202 №2611225 
>>2611197
>А в чем проблема создать под уникальную страницу свою уникальную вьюмодель?
В целом проблем нет.
Аноним 14/02/23 Втр 18:27:43 #203 №2611273 
Почаны, поясните, а микросервисная архетектура сейчас совсем в лету канула? Или вэб разработка на дотнете в целом приуныла.

Год назад полно было вакансий со всякими раббитами, кафками и прочими в требованиях. А сейчас все это пропало. Или это просто hrы поумнели и всякое сторонее говнище в JD больше не пишут.
Аноним 14/02/23 Втр 18:31:47 #204 №2611281 
А обязательно регистрировать сервисы в DI на старте?

Ну вот, к примеру, я сейчас смотрю как Павел Шмачилин создает сервис диалогового окна. Его решение состоит у него из одного проекта и проблем вроде как нет.

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

Можно при регистрации, к примеру, сервиса окно, чтобы он по ходу сам зарегистрировал n сервисов связанных с диалоговыми окнами? Или это нарушает DI?
Наверно нарушает — придется лазить по всему решению и подчищать эти сервисы, если что вдруг.

Вот не нравится мне, что все в одной куче.
Аноним 14/02/23 Втр 18:32:54 #205 №2611286 
>>2611281
Можно при регистрации, к примеру, сервиса окно
сервиса окон*
Аноним 14/02/23 Втр 18:37:04 #206 №2611290 
1123.jpg
>>2611281
Картинка для напоминания. У меня почти каждый сервис — это отдельный проект.
Аноним 14/02/23 Втр 18:37:09 #207 №2611291 
>>2611281
в реализации контейнера от майков тебе нужно сбилдить контейнер же. И после этого в этот контейнер ты не зарегаешь же ничего.

В других контейнерах возможно и потом, но лучше все регать на старте.

>чтобы он по ходу сам зарегистрировал n сервисов связанных с диалоговыми окнами? Или это нарушает DI?
ну так ведь так и делается.
когда ты пишешь services.AddFeature то там же целая куча всего регается.
Ты это можешь делать и в динамике - на старте пробежаться по сборкам (что усложнили) и попросить каждый модуль зарегать все что ему нужно.
Аноним 14/02/23 Втр 20:32:54 #208 №2611405 
>>2611138
Точняк, спасибо. Буду знать теперь.
Аноним 14/02/23 Втр 20:39:29 #209 №2611409 
image
Аноны, как с акронимами обращаетесь в коде (от 3 букв)? Допустим, как писать "iOS" в коде:

LoginWithIosDeviceId
LoginWithIOSDeviceId
LoginWithDeviceId_iOS
Аноним 14/02/23 Втр 20:49:26 #210 №2611413 
>>2611409
> LoginWithIosDeviceId
Обычно так.
Аноним 14/02/23 Втр 20:53:21 #211 №2611417 
>>2611409
Третий вариант мне нравится больше. Если есть много схожих функций, то я предпочитаю неизменный текст отделять от меняющегося — так удобнее категоризировать.
LoginWithDeviceId_iOS
LoginWithDeviceId_Win
Если только это не название класса.
Аноним 14/02/23 Втр 20:55:41 #212 №2611420 
image
>>2611417
Да тут по сути только Android и iOS
Аноним 14/02/23 Втр 21:08:33 #213 №2611434 
>>2611420
Ну, все читаемо.
Аноним 15/02/23 Срд 11:00:13 #214 №2611870 
2023-02-1510-55-50.png
Почему в NET настройки проекта какие-то ебанутые?
При указании директории для сборки показывает ошибку (я помню что это началось чуть ли не в Net Core 3). И вот уже Net7, а директорию по прежнему приходится править вручную в .vbpropj

Хочу сменить точку входа. Что за хуета на пикрил? Какой Form1? У меня WPF, Net7, по дефолту точка входа Main.
Аноним 15/02/23 Срд 11:02:53 #215 №2611873 
>>2611870
> в .vbpropj
> vb
Проблема в этом. На шарпе таких сложностей нет, все работает из коробки.
Аноним 15/02/23 Срд 11:05:13 #216 №2611875 
>>2611873
Как же заебало это некроговно, пиздец просто.
Аноним 15/02/23 Срд 13:10:24 #217 №2612066 
2023-02-1512-53-57.png
Автор переопределяет точку входа.
На пикрил он создает экземпляр App, который является наследником System.Windows.Application
... и его инициализирует.

А откуда, собсно взялся метод InitializeComponent?
В Application его нет. Класс App пустой.
Аноним 15/02/23 Срд 13:12:14 #218 №2612074 
>>2612066
App это наследник Application
наследственность задана через App.xaml

посмотри на окна или юзерконтролы - классы там partial
тут тот же принцип
Аноним 15/02/23 Срд 13:14:01 #219 №2612082 
Image 3.png
>>2612066
>В Application его нет.
есть. у тебя кривая подсказка
Аноним 15/02/23 Срд 13:18:57 #220 №2612099 
2023-02-1513-16-11.png
>>2612074
Это я понял. У меня вопрос в каком месте появляется метод InitializeComponent?
В App.xaml нет, в App.xaml.cs нет.

>>2612082
>есть. у тебя кривая подсказка
Где? В App есть, а в Application нет.
Аноним 15/02/23 Срд 13:20:55 #221 №2612108 
>>2612099
>В App.xaml нет, в App.xaml.cs нет.
Имею ввиду, что там отсутствует код добавления InintalizeComponent.
Но если обратиться к App, то он волшебным образом присутствует.
Аноним 15/02/23 Срд 13:24:42 #222 №2612119 
>>2612099
он появится если у тебя будет App.xaml вида
<Application x:Class="MyProject.App"
что сделает App наследником Application

попутно этот хамл СГЕНЕРИТ partial СВОЮ часть класса App с методом InitializeComponent

xaml же описывает наследование и реализацию partial класса, вторая часть этого partial класса есть code-behind
Аноним 15/02/23 Срд 13:35:20 #223 №2612132 
>>2612066
Но если ты смотришь на CV19, то это бредово вообще совмещать WPF и HostBuilder

1 protected override async void OnExit(ExitEventArgs e) ждать не будет пока там хост сервисы завершит корректно
2 пока вообще стартуют завершаются сервисы и вдруг это долго - пользователь должен гадать "висит али нет"

это гуи. тут нужно сплэшскрин пока все стартует.
Аноним 15/02/23 Срд 13:52:37 #224 №2612154 
2023-02-1513-48-39.png
2023-02-1513-48-53.png
>>2612119
Ясно. У меня в бейсике произошел наверно уже классический сбой, когда code-behind не видит xaml. Соответственно, не видит InitializeComponent и я не мог понять в чем проблема. И главное это никак не пофиксить.

Вот из особенностей бейсика
В шарпе App : Application
В бейсике Application : Application

В code-behind класс не указывается как partial и что он наследует Application. Практически нет ничего, чтобы указывало на реальные дела.
Аноним 15/02/23 Срд 13:57:52 #225 №2612169 
>>2612132
Я планировал сплешскрин, но я думал, что HostBuilder нужен до старта приложения. На SO видел что у некоторых возникали проблемы.
Аноним 15/02/23 Срд 14:03:48 #226 №2612190 
>>2612132
>protected override async void OnExit(ExitEventArgs e) ждать не будет пока там хост сервисы завершит корректно
У меня до DI был свой менеджер завершения приложения, так что тут норм все. Просто сейчас я пока еще юзаю DI скорее как заклинание.
Аноним 15/02/23 Срд 14:04:24 #227 №2612194 
Image 4.png
>>2612154
на скринах все неправильно же

вот как нужно
синей стрелкой - там еще пишут наследование и решарпер ругается что reduntant

>>2612169
хост билдер ему нужен чтобы юзать его возможности - типа чтение конфига (можно напрямую и без хоста, да и для WPF такой конфиг не особо полезен), запуск остановку сервисов - опять же элементарно без него. Ну может там что то и с папками я хз. В общем лишняя приблуда, что насыпает кучу длл в проект, а польза сомнительная.

У него в App.xaml
StartupUri="Views/Windows/MainWindow.xaml">
и поэтому ему нужен ViewModelLocator
и получается async метод OnStartup() работает бесполезно параллельно

я предпочитаю другой подход. всегда удаляю StartupUri и все делаю в OnStartup где после того как сделал все нужное создаю осовную форму и вьюмодель.

попутно могу там создать и 2 окна, и невидимые окна и сплэшскрин который будет работать правильно.
Аноним 15/02/23 Срд 14:06:17 #228 №2612200 
>>2612194
>на скринах все неправильно же
Это дефолтный шаблон VB. Я об этом и пишу, там все ебануто.
Аноним 15/02/23 Срд 14:11:59 #229 №2612224 
>>2612200
... причем если начнешь лезть в это дело, то у студии крыша едет.
К примеру, у когда набирается штук 20 partial классов в связке с xaml, то начинает то тут то там возникать ошибки, мол code-behind класс не видит метод или свойство из xaml-части.

Я этот проект доделаю и срулю с бейсика. У меня уже сил нет.
Аноним 15/02/23 Срд 14:36:16 #230 №2612294 
>>2612194
>всегда удаляю StartupUri и все делаю в OnStartup где после того как сделал все нужное создаю осовную форму и вьюмодель.
Можно ставить просто Startup и тогда указывается путь к желаемому методу. А StartupUri это если у тебя одно окно и больше никаких сервисов. Хотя я смотрел в App.g и там по сути генерится подписка на событие Application.Startup.

>В общем лишняя приблуда, что насыпает кучу длл в проект, а польза сомнительная.
У меня в принципе все так приблизительно и было устроено — был общий хаб из кучи сервисов, которые я называл у себя менеджерами. Иначе бы у меня просто не заработало, когда каждый сервис — это отдельный проект.
Аноним 15/02/23 Срд 15:44:07 #231 №2612415 
2023-02-1515-41-20.png
За три года библиотека пожирнела в 10 раз — с 29М до 290M
Аноним 15/02/23 Срд 15:45:01 #232 №2612418 
>>2612415
мелгомягкие опять обосрались с оптимизацией
Аноним 15/02/23 Срд 16:05:13 #233 №2612436 
>>2612415
это СЧЕТЧИК скачиваний )))
Аноним 15/02/23 Срд 16:14:31 #234 №2612448 
2023-02-1516-13-12.png
>>2612436
Бля ... а я думаю чет одной буквы не хватает.
Аноним 15/02/23 Срд 16:37:53 #235 №2612471 
16588910693230.webm
Привет, шарпаны.
Вопрос 1. Есть два View, один главный, в котором находятся кнопочки и второй, в котором находится контент. Когда жмёшь кнопочку в главном, то меняется значение в глобальной переменной. В зависимости от значения отрисовывается контент во втором View. Проблема в том, что он не самообновляется и контент отрисовывается только один раз. Как сделать так, чтобы при нажатии кнопки/изменении переменной, рефрешился контент во втором View?
Вопрос 2. Во втором View в файле xaml.cs у меня написана всякая логика, которая что-то делает/отрисовывает новый контент на странице. У меня есть ещё файл с классом и логикой, из которого дёргаются дополнительные функции. Как мне в этот файл с классом передать Grid/Row/Column из View, чтобы использовать внутри классовых функций методы типа gridRowName-Children.Clear(), gridRowName.Children.Add(name) ?
Аноним 15/02/23 Срд 17:06:55 #236 №2612493 
>>2612471
Шмачилин как раз буквально месяц назад выложил ролик на эту тему.
https://youtu.be/XG2reVjcNTs
Аноним 15/02/23 Срд 17:09:24 #237 №2612498 
>>2612471
> Проблема в том, что он не самообновляется и контент отрисовывается только один раз.
Во-первых, ты реализовал биндинг? Ты же не меняешь значение напрямую?
Во-вторых, у твоего биндинга какой режим? По-умолчанию он односторонний.


Я заметил, что если у связываемых свойств разные данные, то биндинг ломается. Т.е. могу предположить, что у тебя односторонний биндинг и с той стороны, где нет обновления, ты меняешь свойство — с этого момента с другой стороны ломается биндинг. Либо у тебя биндинга вообще нет. Лиоб у тебя стоит режим биндинга OneTime
Аноним 15/02/23 Срд 17:15:15 #238 №2612509 
>>2612498
мимокрок
обычно реализации INPC проверяют на дубликаты. То есть важно как именно обновляется свойство

но у автора не MVVM, а значит пусть страдает
Аноним 15/02/23 Срд 17:15:43 #239 №2612510 
>>2612471
>Вопрос 2
У тебя MVVM или под View ты понимаешь какой-то тип контрола?
Аноним 15/02/23 Срд 17:24:03 #240 №2612520 
kod.jpg
>>2612498
>ты реализовал биндинг

Скорее всего нет. У меня в xaml файле ток скелет, а логика и как что меняется в файле с классом отдельно и часть в xaml.cs

>>2612510
Я стартовал базу по гайду, там MVVM, но что у меня по факту получается это другой вопрос
Аноним 15/02/23 Срд 17:25:52 #241 №2612526 
>>2612520
вот смотрите на него - наглядный пруф что в впф можно как в винформсах и нафиг те формсы нужны
Да хто эти ваши ОБСЕРвабл КАЛлекшионы? аноним 15/02/23 Срд 18:07:28 #242 №2612586 
Уже второй год изучаю шарп и вдруг пришло осознание, что вообще не в курсе как работает многопоточность, мой уровень async await. Хочу восполнить данный пробел. Можете посоветовать годные книгу/статью/видос по данной теме?
Аноним 15/02/23 Срд 18:24:25 #243 №2612608 
2023-02-1312-14-36.png
2023-02-1518-20-04.png
>>2612526
Я так и начинал, лол. Я вообще в впф перешел по принципу "винформс, где можно кнопочки вращать".

>>2612520
Ну смотри, с этого момента начнется Ад, все девять кругов, если не встанешь на путь истинный. С MVVM — всего лишь пару кругов. Все что ты должен уяснить, это не менять параметры напрямую, иначе будет пикрилейтед 1.

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

Для этого нужны специальные свойства, точнее свойства обмазанные поверх еще кодом. Два варианта:
1. как анон пишет INPC, что расшифровывается как INotifyPropertyChanged. Суть проста: нужное событие кроме того, что сохраняет значение, еще и вызывает событие, мол "пацаны, я тут обновляюсь", и все пацаны, которые подписались на это событие, тоже автоматом обновляются. Вот как ты подписываешься на событие нажатия кнопки (наверно), тоже самое делают свойства, но делают они это автоматически.
Здесь ты должен еще уметь не только подписываться на события, но создавать и вызывать их.

2. Это DP или DependencyProperty. Этот вариант в основном нужен для элементов интерфейса. Т.е. все вот эти свойства в кнопочках, типа Background, Width, Height, Margin и т.д. — все это Dependency Properties. И вот когда ты меняешь разметку xaml и у тебя автоматом меняется данные в окне Свойств — это заслуга привязок к Dependency Properties.

Короче, гугли:
- Events. Создание, вызов и подписка.
- INotifyPropertyChanged (тут бы еще в интерфейсы вникнуть, но пока пох)
- DependencyProperty
Аноним 15/02/23 Срд 18:27:22 #244 №2612614 
>>2612608
>для элементов интерфейса
пользовательского интерфейса* а то будет путаница с интерфейсами
Аноним 15/02/23 Срд 18:32:21 #245 №2612620 
Блядь, почему у Авалонии нет нормальной подсветки синтаксиса и автокомплита в вижаке, но есть в райдера? Ебучие жыдбрейнсы
Аноним 15/02/23 Срд 18:36:37 #246 №2612628 
>>2612620
Наверно у них есть статистика по числу пользователей. Щас бы в проприетарной студии шатать авалонию.
Ты случаем не полупокер?
Аноним 15/02/23 Срд 18:50:08 #247 №2612645 
>>2612628
А райдер не проприетарный? Чо несёт...
Аноним 15/02/23 Срд 18:53:45 #248 №2612646 
>>2612593
Благодарю
Аноним 15/02/23 Срд 18:55:20 #249 №2612649 
райдер просто оф поддерживает авалонию
а мелкие считают что авалония обладает фатальным недостатком
Аноним 15/02/23 Срд 19:20:49 #250 №2612702 
>>2612620
А ты расширение ставил?
Аноним 15/02/23 Срд 19:39:40 #251 №2612740 
>>2612702
Поставил, оно только подкидывает свойства контролов. Хайлайт на уровне просто xml схемы, автокомплит не видит методов в код бихайнд. Сам фреймворк выглядит круто, то что нужно моей тиме. Но если поддержка в вижаке только такая то это печальная хуйня - верстать ui в голом xml это шиза.
Аноним 15/02/23 Срд 19:52:03 #252 №2612761 
kod2.jpg
>>2612608
Вопщем написал Binding текста к тыканию кнопки. Но у меня кнопка и Лейбл с текстом на разных страницах/View/xaml файлах. Когда всё в одном файле то работает, текст изменяется, когда в разных ничего не происходит. Может там пути какие-то по особому прописать надо?
Аноним 15/02/23 Срд 19:55:17 #253 №2612763 
>>2612740
Перекатывайтесь на uno platform, одобрено майками.
Аноним 15/02/23 Срд 20:06:18 #254 №2612774 
>>2612763
Уно тоже чекаю сейчас, мы уже работаем с WinUI 3. В авалонии просто много хороших синтаксических плюшек в xaml добавили как я успел увидеть в доке (обращение к родителю через индекс, например), а WinUI 3 чот дубовый, xaml времён wpf. Некоторые вещи делаются только через анальное сальто.
Аноним 15/02/23 Срд 20:55:21 #255 №2612806 
>>2612761
У кнопки подписка на метод CloseClick, а линия ведет к методу ClickSecondResult. Это не ошибка?

Можешь то нибудь вывести на печать в методе ClickSecondResult и что нибудь при присвоении value в Content и посмотреть в каком месте отвалилось.
Ну или точками останова.
Аноним 15/02/23 Срд 20:55:52 #256 №2612808 
>>2612806
>подписка на метод CloseClick
хуйню сморозил, ну в общем ты понял
Аноним 15/02/23 Срд 21:17:20 #257 №2612819 
>>2612774
>в xaml
Я, блин, не понимаю как вы это дерьмо вообще используете. Да еще и выбирать можете где эта куча говна менее пососная.
Мимо бэкэндер.
Аноним 15/02/23 Срд 21:21:25 #258 №2612821 
>>2612819
Через силу, потому вечно в писках.
Аноним 15/02/23 Срд 21:21:28 #259 №2612822 
>>2612819
Бэкендер проходи мимо.
Вот когда встанет у тебя вопрос необходимости гуи вот тогда и приходи померяемся... удобством
Аноним 15/02/23 Срд 21:24:47 #260 №2612823 
>>2612819
И я не понимаю, юзаю няшные винформы, описываю контролы декларативно в коде через инициализаторы.
Аноним 15/02/23 Срд 22:06:51 #261 №2612837 
kod3.jpg
kod4.jpg
>>2612806
Да, сорян, уже залипаю. Но сути особо не меняет. В консоле показывает что на кнопку всё нормально биндится и вэлью обовляется, но обновлённый текст дальше в элемент в другом View не выводится.
Аноним 15/02/23 Срд 22:59:45 #262 №2612865 
Кто-нибудь знает, можно ли с помощью mailkit получить метки или поставить.
Я имею ввиду те метки, что юзер добавляет на сообщение в яндекс почте
Аноним 16/02/23 Чтв 11:15:12 #263 №2613091 
>>2612822
>Вот когда встанет у тебя вопрос необходимости гуи вот тогда и приходи померяемся
Ну я как раз таки и ушел в чистый бэкенд, чтобы даже длинной палкой эти ваши гуи не трогать, так что не померяемся.
Аноним 16/02/23 Чтв 11:17:08 #264 №2613093 
>>2612979
Какой 'хайп', ты о чем? Иди пей свой смузи зумерок и не отвлекай взрослых дяденек от работы.
Аноним 16/02/23 Чтв 11:19:06 #265 №2613094 
>>2613093
Сейчас на хайпе голанг и зумеры реально схавали язык с дизайном из 1970
Аноним 16/02/23 Чтв 11:43:17 #266 №2613116 
>>2613091
так не путай теплое с мягким.
сам ведь свои слова не в консоли написал, а значит гуи таки нужен. И если бы ты был фронтендер то твои слова имели бы смысл, а так ты просто пукнул в лужу.
Аноним 16/02/23 Чтв 13:10:25 #267 №2613198 
>>2613116
>значит гуи таки нужен
Ты сам с собой что ли разговариваешь? Никто не говорил, что гуи не нужен. Разговор был об уебищности xaml-like синтаксиса.
Аноним 16/02/23 Чтв 13:53:40 #268 №2613245 
>>2613198
А я сказал "приходи с альтернативами - померяемся"

Сам я не люблю хамл, но альтернативы какие? Описание в коде, как винформс генерит? Сразу нах.

Хтмл... ммм тот же хмл

MVU стиль... как там в мауи новое
Неплохо,но шарп беден на выразительность
И вообще то что норм для мобилы - мало для десктопа

Что осталось? А ничего

А ты с чем пришел....
Аноним 16/02/23 Чтв 14:24:26 #269 №2613275 
>>2612837
Странно, тогда как место расположения кнопки может влиять на обновление данных, если проблема во вьюмодели? Ты же вьюмодель не пересоздаешь нигде, никуда не перемещаешь? Она подхватывается вообще?
Аноним 16/02/23 Чтв 14:27:50 #270 №2613277 
>>2613091
>ушел в чистый бэкенд, чтобы даже длинной палкой эти ваши гуи не трогать
А мог бы предложить свой вариант решения проблемы, вместо того, чтобы убегать от нее. Но видимо ты можешь только кукарекать.
Аноним 16/02/23 Чтв 14:39:30 #271 №2613283 
>>2613277
>А мог бы предложить свой вариант решения проблемы, вместо того, чтобы убегать от нее.
А еще голодающих детей в Африке накормить.
Аноним 16/02/23 Чтв 14:40:42 #272 №2613284 
>>2613245
Надо было сделать язык разметки в стиле шарпкода.
У меня как минимум две претензии к хамл:
1. нет инкапсуляции
2. ебешая мусорная вложенность даже на малейший пук.
3. почему если возникает ошибка в xaml, программа не останавливается на этой ошибке, а идет дальше, где совершенно очевидно будет все очень плохо и куча исключений.

Где-где, а в стилях я бы мигом реализовал DI. Сейчас, если у меня отвалится стиль, то посыпется весь проект. Я не могу проект сделать по настоящему модульным. Я не могу вычленить проект из одного решения и вставить в другой чисто из-за стилей.
Аноним 16/02/23 Чтв 14:43:28 #273 №2613287 
>>2613283
Зачем? Сконцентрируйся на одной задаче и решай ее. Ну или отойди в сторону и не бухти.

Все знают, что хуета, просто лучшего не придумали.
Аноним 16/02/23 Чтв 14:58:03 #274 №2613309 
>>2613284
>Надо было сделать язык разметки в стиле шарпкода.
помню в разных языках делали разметку для хтмл типа так
h1{
p{...}
}
сильно взлетело? так это только разметка же.

а xaml это не разметка, а декларативное выражение кода. иначе будет как в (ну на жс я не пишу, поэтому для меня это андроид - xml лежат отдельно и связывает все это code-behind - и там и там гора текста). Почему хмл, а не DSL - тут хз. Но что есть то есть.

>1. нет инкапсуляции
непонятно о чем это. в code-behind все есть, а то что генерит xaml - наружу то и не просачивается так чтобы где то мешал
>2 ебешая мусорная вложенность даже на малейший пук.
по факту полный эквивалент кода на шарпе. так что вложенность она от самой природы "что хочешь изобразить"
основная претензия должна быть "нереальная простыня же"
>3 программа не останавливается на этой ошибке
ошибка в хамл не прокатит. ошибка в биндингах прокатит и другие исключения глотает. что не гуд, но это не хамл, а WPF такой.

>Я не могу проект сделать по настоящему модульным
ну с этим проблема в design-time. тут они сделали херню...как и со стилями.

>>Надо было сделать язык разметки в стиле шарпкода.
вот я буквально ссу кипятком от выразительной мощи jetpack compose. но это не шарп.... а шарп...это шарп. его new, отсутствие инлайн функций, отсуствие функций без классов и много чего другого сильно ограничивает. Даже в мауи они пошли по пути "делаем как swift combine" что лучше чем ничего, но по факту "мы сделали как могли".
Для мобилок покатит, для десктопа увы.
Аноним 16/02/23 Чтв 15:00:18 #275 №2613314 
>>2613309
> что не гуд
Как раз таки гуд. Смысл крашить приложения из-за пары не прогрузившихся биндингов?
Аноним 16/02/23 Чтв 15:02:03 #276 №2613317 
>>2613314
не гуд. в итоге каждый метод который привязан к команде я вынужден оборачивать в try..catch, даже если это пет проект.
Аноним 16/02/23 Чтв 15:39:43 #277 №2613365 
>>2613309
>непонятно о чем это.
>по факту полный эквивалент кода на шарпе. так что вложенность она от самой природы
Почему не сделать через ту же точку.
Почему вместо вот этого дерьма
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>

</ControlTemplate>
</Setter.Value>
</Setter>


не писать так:
Setter Property="Template" {
Value {
ControlTemplate{

}}}


Я конечно придрочился уже, но в первые дни в глазах рябило.
Аноним 16/02/23 Чтв 15:42:57 #278 №2613367 
>>2613245
> Сам я не люблю хамл, но альтернативы какие?
QML
Аноним 16/02/23 Чтв 15:46:27 #279 №2613369 
тест

▲ ▲
Аноним 16/02/23 Чтв 15:48:12 #280 №2613372 
>>2613367
Оно шарповое? Увы нет.
Что там вообще с концепцией lookless? А ничего

Xaml кажется говном пока не начнешь искать замену
Аноним 16/02/23 Чтв 15:50:51 #281 №2613374 
>>2613369

▲ ▲
Аноним 16/02/23 Чтв 16:11:14 #282 №2613397 
▲ ▲
Аноним 16/02/23 Чтв 16:49:20 #283 №2613431 
Признаем честно. .net - ахуенная платформа а Шарп самый ахуенный язык. Но в пыняленде заправляют жависты. Жалко вас оставлять, но я пошел ковырять шпринг... Не хочу умереть с голоду. Пока джавадебил пилит круды в сбере за 250к я должен вкуривать в фуллстак с микросервисами кубером и кафкой чтобы получить дай бог 180. В пизду. Теперь Яджавадебил.
Аноним 16/02/23 Чтв 16:53:55 #284 №2613435 
>>2613431
>Теперь Яджавадебил.
Таких дебилов-умников знаешь сколько? Они все настолько умники, что дебилы.
Аноним 16/02/23 Чтв 17:03:52 #285 №2613452 
>>2613431
https://www.youtube.com/watch?v=wRep_S7oVIA
Аноним 16/02/23 Чтв 17:54:10 #286 №2613512 
Смотри чему блейзор научат в 8 дотнете.
https://www.youtube.com/watch?v=48G_CEGXZZM

Если вкратце, то блейзер сервер сможет оправлять любой компонент в виде вебасембли в браузер пользователю и закрывать соединение. Таким образом высоконагруженные компоненты будут грузить ресурсы пользователя, а не сервера.
Аноним 16/02/23 Чтв 18:55:16 #287 №2613601 
hqdefault.jpg
>>2613512
>Лицо ПК когда блейзер скидывает нагрузку, а ПК еще не отошел от хрома и майнеров.

Т.е. условная веб-версия фотошопа будет обычным фотошопом, но с защитой от правки файлов. Вот это многоходовочка копирастов.
Аноним 16/02/23 Чтв 19:42:36 #288 №2613657 
>>2613574
А если типичный пользователь оставляет 5000 вкладок?
Аноним 16/02/23 Чтв 19:52:10 #289 №2613665 
>>2613275
Да,само вью обновляется через onpropertychanged по клику на кнопку, которая в главном вью, а вот значение чего либо, текста например, внутри обновляемого вью, которое идёт через биндинг, не обновляется.

Пока просто сделаю несколько вью. И на второй свой вопрос я нашёл ответ, так что станет меньше дублируемого кода.
Аноним 16/02/23 Чтв 19:59:02 #290 №2613672 
>>2612837
> пик
Зачем ты сам реализовываешь relaycommand, onpropertychanged и тд? Есть же готовые mvvm фреймворки вроде reactive ui.
Аноним 16/02/23 Чтв 20:04:23 #291 №2613681 
>>2613672
Я до этого в с# не кодил и не знаю что есть, а что нет.
В любом случае использовать фреймворки-библиотеки не разобравшись в базе, это мартышкин труд.
Аноним 16/02/23 Чтв 21:15:11 #292 №2613747 
image
Пацаны, а это нормально, что я в свойствах возвращаю структуры? И чтобы внести изменения, нужно сначала получить значение из свойства, а потом его задать обратно и вызвать Save, типа:

var settingsPrefs = _sharedStorage.SettingsPreferences;
settingsPrefs.SelectedLanguage = Language.Russian;
_sharedStorage.SettingsPreferences = settingsPrefs;
_sharedStorage.SaveChanges();
Аноним 16/02/23 Чтв 23:08:16 #293 №2613844 
>>2613665
Проверь DataContext страницы (где должно быть обновление) на наличие экземпляра вью. Вроде есть еще событие DataContextChanged, но это не точно.
Там же попробуй проверить свойство Content этого вью.
Еще для уверенности поставь через запятую режим привязки Mode="TwoWay"
Text="{Binding Content, Mode=TwoWay}"
Это сделает привязку двухсторонней.

Либо как нибудь по нажатию условной кнопки проверь DataContext.
Окно интерпретации ничего не пишет? Нет там Data Binding Error?
Аноним 16/02/23 Чтв 23:22:11 #294 №2613861 
>>2613747
Ненормально.
SettingsPreferences у тебя должен быть классом, раз у тебя такая сложная начинка.
Соответственно, меняя свойство SettingsPreferences.SelectedLanguage у тебя автоматом внутри _sharedStorage должно все обновиться.

Либо создавай на ходу новый экземпляр SettingsPreferences и кидай его в _sharedStorage. Ели так не можешь, что структура здесь бессмысленна. Структура должна быть ровно такой, чтобы ты на ходу мог записать вот так: new point(10, 45)

Не ты случаем боишься нагружать GC в своей мобильной дрочильне?
Аноним 16/02/23 Чтв 23:29:21 #295 №2613865 
>>2613747
Вангую SaveChanges перебирает все свойства на предмет совпадений со старыми SettingsPreferences. Сколько там свойств в сеттингах?
Аноним 17/02/23 Птн 12:16:09 #296 №2614215 
image
>>2613861
> Не ты случаем боишься нагружать GC в своей мобильной дрочильне?
Ну да.

> SaveChanges перебирает все свойства на предмет совпадений
Нет. Мой класс - это обёртка над SharedPreferences на Android и NSUserDefaults на iOS. В чём суть этих классов? Они хранят данные по ключ-значение. Вот такие у них методы:

- SetInt(ket, value)
- SetBool(ket, value)
- SetString(ket, value)

И ещё метод commit/sync, который сохраняет изменения в файл. На Android все эти значения сохраняются в XML файл, который хранится во внутренней памяти смартфона. Я решил не дрочить каждое поле делая его отдельным ключом, а использую JSON.

Плюс нужно ещё дефолтные значения держать. Если пользователь зашёл первый раз, то мне нужно подставить дефолтный SettingsPreferences/ControlsPreferences. Можно конечно захардкодить эти значения в самих структурах, но мне ещё нудно во время тестовые подставлять другие значения, поэтому их лучше всё же загружать откуда-то внутри SharedStorage.
Аноним 17/02/23 Птн 12:42:55 #297 №2614232 
>>2614215
Я наверно нюансов не знаю, но я смотрю на это и мне хочется сеттинги и преференсы сделать классами. Ну это же настройки приложения, они загрузятся раз в сессию и всё.

>Плюс нужно ещё дефолтные значения держать.
Это все из коробки есть вроде. Если в кастомных настройках что-то отсутствует, то оно берется из дефолтных.

Ты десериализуешь JSON?
Аноним 17/02/23 Птн 13:03:28 #298 №2614250 
>>2614232
> они загрузятся раз в сессию и всё.
Да, именно так.

> Это все из коробки есть вроде
Нет. Это мне самому нужно в коде сделать.

> Ты десериализуешь JSON?
При первом обращении десериализую строку. Если строка отсутствует, то возвращаю дефолтное значение структуры. Если строка присутствует, то результат десериализации сохраняю в переменную, чтобы каждый раз этого не делать, когда запрашиваются настройки.

В общем, фиг знает... Мне нужно использовать native хранилище "ключ-значение". Хранить там как-то различные настройки. И при этом иметь возможность подставлять дефолтные значения (то же расположение элементов управления на экране например)
Аноним 17/02/23 Птн 13:15:27 #299 №2614257 
Зачем в IHost метод Run?

Когда я добавил сервисы, то думал, что экземпляр требуемого сервиса будет создан как только его потребуют. По факу у меня тишина, ибо не было того самого инициатора. После IHost.Build() ни один из сервисов не запустил конструктор.

Как только я у хоста потребовал хоть один сервис, вся цепочка сервисов проинициализировалась и запустилась. Но я по прежнему не понимаю для чего нужен тогда IHost.Run()? Есть еще IHost.Start().
Аноним 17/02/23 Птн 13:31:23 #300 №2614267 
>>2614257
ааа, без этого как минимум логгирование не работает.

Тогда я что-то делаю не так со стартом сервисов. У Павла Шмачилина напрямую запускается основное окно, которое треубет сервис. У меня же запуском окна заведует другой сервис, который никогда не проинициализируется самостоятельно.

В общем я запутался для чего нужен этот Run. Почему я не могу так же пнуть логгер? Зачем ему нужен Run? Или это касается только логгирования методов, типа Microsoft?
Аноним 17/02/23 Птн 13:49:52 #301 №2614278 
>>2614250
>В общем, фиг знает... Мне нужно использовать native хранилище "ключ-значение".
У тебя такие сложности только из-за сопоставления дефолтных настроек и пользовательских. Вместо того, чтобы запихнуть в десериализацию класс\структуру целиком, ты начинаешь десериализовать поэлементно.
Ты начинаешь обращать внимание на формат "key, value", хотя это вообще не стоит внимания.

Не могу ничего пока сказать, я до IConfiguration еще не добрался, пока разбираюсь с логгированием. Но жопой клянусь было там что-то, что решает проблему сопоставления настроек. По-моему это называется "разные уровни настроек" по аналогии с разными уровнями логгирования. У тебя должен быть уровень дефолтных настроек, уровень настроек для отладки (где ты и дописываешь свои тестовые настройки), и есть уровень настроек обычных.
Аноним 17/02/23 Птн 13:51:05 #302 №2614280 
>>2614267
> IHost.Build() ни один из сервисов не запустил конструктор
а должен? ты там регистрируешь чего то добавляешь конфигуришь. и когда уже все, то билд все это дело обработает.

как и DI контейнер от майков

>>2614257
>IHost.Run()? Есть еще IHost.Start().
потому что без этого у тебя просто сконфигурированный хост и ничего более.

чтобы сконфигурированный хост наконец запустить. тогда он под капотом запустит хостед сервисы как минимум.

и вообще эти рун/старт = обертки над асинк версиями с помощью GetAwaiter().GetResult()

а разница между ними такая же как в винформсах/впф разница между Show/ShowDialog - то есть "когда метод вернет управление"
Аноним 17/02/23 Птн 14:05:05 #303 №2614293 
>>2614280
>а должен?
Я пытаюсь осмыслить принцип, и предполагал, что при билде сервисов будет создан хотя бы один экземпляр, по крайней мере для синглтонов.
Хотя наверно это логично. Зачем плодить сущности, если их никто не требует?

>тогда он под капотом запустит хостед сервисы как минимум.
Он запустит только свои внутренние сервисы, но не добавленные мною?
Просто я могу сконфигурировать сервисы и запусть самостоятельно нужный, и у меня будет все работать без Run. Как бы, отряд не заметит потерь.
Аноним 17/02/23 Птн 14:45:57 #304 №2614356 
>>2614293
принцип простой - билдер позволяет удобно сконфигурировать и создать какой то объект. в этом смысл паттерна билдер.

>при билде сервисов будет создан хотя бы один экземпляр, по крайней мере для синглтонов.
они будут созданы по мере надобности. Незачем их создавать заранее. Даже в подходе MyClass,Instance инстанс не создается до первого обращения. Так и тут - нет нужды, вот и не создается.

Билдер сконфигурирует конфиги, сбилдит DI контейнер, установит хендлеры на события консоли (и то не факт, может это после старта) и так далее

>Он запустит только свои внутренние сервисы, но не добавленные мною?
Вряд ли унего есть что то свое. А значит он выдерет из контейнера все IHostedService и запустит их

>Просто я могу сконфигурировать сервисы и запусть самостоятельно нужный
Конечно можешь. Это ж просто дается унифицированный вариант. ОДИН из вариантов просто от вендора. Чтобы ты в каждом консольном проекте не писал свой велосипед заново.
Но это не является убер фичей. Просто ОДИН из готовых вариантов.

Если тебе нравится их подход то это позволяет тебе не бойлерплейтить лишний раз. Мне вот не нравится - слишком засирает дллками, да и IOptions не люблю и логгер Nlog использую

Иначе ты можешь писать свой хост. А потом заметив что ты пишешь одно и то же от проекта к проекту - соберешь все в либу и будет у тебя свой такой же. Этот от майков не первый же - их много.
Аноним 17/02/23 Птн 15:08:46 #305 №2614399 
image.png
Чет я уже заебался, аноны, полдня ебусь с этими поведениями. Почему у меня код на пикрил срабатывает только один раз?
Аноним 17/02/23 Птн 15:20:57 #306 №2614405 
Say Goodbye to Code-behind: WinForms meets MVVM & .NET MAUI
https://devblogs.microsoft.com/dotnet/winforms-cross-platform-dotnet-maui-command-binding/

Формочки научат MVVM. Лица впф макак представили?
Аноним 17/02/23 Птн 15:43:18 #307 №2614423 
2023-02-1715-25-40.png
>>2614356
>Мне вот не нравится - слишком засирает дллками
Эх, и зачем я смотрел в bin?

>Иначе ты можешь писать свой хост.
Так я уже пытался обойтись, но понял что начинаю изобретать тоже самое и вернулся к готовому.

> и логгер Nlog использую
Я видел там, что можно самому указать паттерн вывода сообщения.
Хотел читать логи с подсветкой синатксиса.
Аноним 17/02/23 Птн 15:48:42 #308 №2614429 
>>2614423
нужно смотреть в publish.

создайть контейнер, запихать в него все, тупо из него достать IHostedService - запустить их и выгрузить потом, прочитать конфиг из жсона, прикрутить логгер - все это очень простые вещи

просто являются бойрелплейтом, но все же простым.

по логгеру - везде можно указать много чего. Nlog мне нравится подходом к конфигурированию - отдельно логгеры, отдельно таргеты, и все это связывается отдельными правилами "вот эти логгеры вот туда пусть пишут".
Очень удобно если логи в файлах.
Аноним 17/02/23 Птн 15:50:11 #309 №2614432 
>>2614405
>Формочки научат MVVM. Лица впф макак представили?
Я тебе расскажу про свое лицо: ему абсолютно поебать.
Там будет поддержка уровня поддержки бейсика. Формально прикрутят, но в целом всем насрать. Исправление каждой хуеты будешь по 5 лет ждать или не дождешься вообще.

Я понял, что ты вбросил ради рофла
Аноним 17/02/23 Птн 15:53:38 #310 №2614434 
>>2614278
Ну, это не совсем настройки. У меня уже есть система внутренних конфигов. Здесь же "предпочтения пользователя".

Обмозговал твои слова. Может так сделать?
https://pastebin.com/08LNagUa

CommonPreferences, SettingsPreferences, ControlsPreferences - станут классами. UserPreferencesDefaults будет подставляться в рантайме в зависимости от типа билда.

Плюс внутри PreferencesContainer ещё буду хранить версию настроек. Бывает что-нибудь изменяется и нужно грамотно мигрировать настройки пользователя, иначе их придется сбросить и тогда игрок бомбанёт от того, что ему по новой всё настраивать.
Аноним 17/02/23 Птн 16:40:33 #311 №2614472 
>>2614434
А че ты их просто в БД не хранишь?
Тогда у тебя не будет проблем ни с хранением, ни с извлечением, ни с изменением настроек.
Аноним 17/02/23 Птн 16:40:58 #312 №2614474 
2023-02-1716-36-15.png
>>2614434
Наверно, я пока ничего не могу сказать.
А с классами, думаю, будет рациональнее.

>нужно грамотно мигрировать настройки пользователя
А это хранение предыдущих настроек предполагается в пределах одной сессии?

Может легче просто сохранять конфиги в новый файл, а затем удалять предущий? Во многих приложениях так бэкапы устроены.
1. Есть некий TempFile, который удаляется после сессии.
2. Либо всегда есть два файла — один рабочий, а другой Backup-версия.
Собсно пример на пикриле. Текущий файл переименовывается с префиксом "Backup_", а новая версия сохраняется под обычным названием.

И реализация этого не требует каки-то больших сил. Не надо городить внутри PreferencesContainer копии настроек, это мусор.
Аноним 17/02/23 Птн 16:44:39 #313 №2614478 
>>2614474
>2. Либо всегда есть два файла
Чую, что когда буду изучать конфиги, там такой оции из коробки не будет.
Аноним 17/02/23 Птн 21:37:11 #314 №2614841 
2023-02-1721-25-33.png
2023-02-1721-26-52.png
В чем может быть причина?
Дефолтный логгер выводил логи по
Microsoft.Hosting.Lifetime и подобному.

Решил подключить Serilog, решил начать с простого. После чего перестало выводиться все, кроме того, что я укажу, хотя в джейсоне прописал пикрил 1.
"Override": {
"Microsoft": "Information",
"System": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}

Могу еще код показать, но он на бейсике, хотя там в принципе все тоже самое. Отваливается из-за host_Builder.UseSerilog, но если эту строку не писать, то работает и дефолтный логгер и серилог (каждый печатает свое).
Аноним 17/02/23 Птн 21:44:04 #315 №2614858 
2023-02-1721-39-22.png
>>2614841
А это где должно быть? В асп это что-то по умолчанию.
Аноним 17/02/23 Птн 22:13:17 #316 №2614896 
2023-02-1722-09-02.png
>>2614841
>>2614858
заработало, но с пикрил
Это же по сути одно и то же, но почему с первый
ReadFrom.Configuration не сработал, а второй сработал?
Что-то в конфигурациях недоставало?
Аноним 18/02/23 Суб 01:44:44 #317 №2615004 
>>2614841
все твои проблемы от бейсика
ну я даже не знаю - у других просто нет таких проблем.
Аноним 18/02/23 Суб 09:15:04 #318 №2615057 
Что скажете об Avalonia XPF?
Аноним 18/02/23 Суб 09:15:29 #319 №2615058 
>>2615057
> We enable WPF apps to run on macOS and Linux with our Fork of WPF, which allows us to maintain API compatibility. Avalonia XPF replaces the low-level WPF code (MilCore) with Avalonia UI.
Аноним 18/02/23 Суб 10:13:47 #320 №2615109 
Нубский вопрос по EF Core. У меня есть две энтити - юзер и эвент. Юзер может участвовать во многих эвентах, в эвенте, соответственно, может участвовать много юзеров. Получается many-to-many отношение. Пробовал сначала сделать в каждой энтити ICollection с типом противоположной, потом пытался сделать join-таблицу вручную. В обоих случаях все создается нормально, но в получившейся join-таблице метод OnDelete указан как Cascade. Правильно я понимаю, что при удалении одной энтити будут удалены и все связанные с ней? Например, с удалением эвента удалятся и все юзеры, которые являются его участниками? И если да, то как этого избежать, как изменить метод OnDelete на Restricted?
Аноним 18/02/23 Суб 10:46:29 #321 №2615132 
>>2615109
Наоборот, при удалении юзера удаляется события, это же свойства FK
Аноним 18/02/23 Суб 11:02:28 #322 №2615139 
>>2615132
Это же many-to-many? Чет я запутался. Попробую спросить проще и на более простом примере.

Есть студенты и есть курсы. Студент может посещать много курсов, на каждый курс ходит много студентов. Как реализовать это отношение с помощью EF Core, чтобы ничего не удалялось каскадно? То есть, если все студенты отписываются от курса, то курс все равно остается. Или если курс удаляется, то студенты тоже не удаляются.
Аноним 18/02/23 Суб 13:31:03 #323 №2615273 
>>2610447
Да я вкурсе, я все изначально поставил в инсталере, перечитай мой пост - обосрались майки.
Аноним 18/02/23 Суб 17:40:00 #324 №2615550 
изображение.png
Стоит читать ее?
Аноним 18/02/23 Суб 18:49:59 #325 №2615681 
>>2615550
Похоже на страпон на веревочке.
Аноним 18/02/23 Суб 19:00:21 #326 №2615693 
>>2615681
Тож подумал, что на дилдак какой-то похоже, а потом прочитал название и в принципе всё так и есть.
Аноним 18/02/23 Суб 21:23:24 #327 №2615928 
Аноны, есть какой-то стандарт размещения членов класса? Что должны идти первым? Поля -> Свойства -> События -> Конструктор -> Методы ?
Аноним 18/02/23 Суб 21:35:24 #328 №2615939 
image
>>2615928
https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/coding-style.md
Аноним 18/02/23 Суб 22:06:28 #329 №2615985 
А можно в Serilog или где-то еще устанавливать шаблон вывода индивидуально для каждого уровня? Чет не нашел.

И в какие моменты используется Log.CloseAndFlush()?
Аноним 18/02/23 Суб 22:45:34 #330 №2616012 
2023-02-1822-38-45.png
>>2615985
Либо серилог ебанутый, либо я что-то делаю не так.

Один и тот же паттерн конфигурации вывода.
Если написан в json, то распознает табуляцию "\t", а через код не распознает.

Как удалять лог-файл при каждой сессии хрен знает. Типа удали напрямую, а если в имени лога автоматом генерируется дата? А для этого конфигурируй при помощи кода, а при помощи кода мы не можем конфигурировать, потому что идет по пизде разметка.

Боюсь имаджинировать как рабоатет Nlog.
Аноним 18/02/23 Суб 23:11:05 #331 №2616032 
>>2615985
>>2616012
Я определенно делаю не так.

Дело в том, что конфигурация логгера Serilog.LoggerConfiguration идет до метода .ConfigureAppConfiguration, в котором я конфигурирую сервисы. Там создается новый экземпляр ILogger и конфигурируется он там автоматически.

В итоге у меня создалось два логгера, которые еще и друг другу мешали, и что я пытался исправить при помощи Log.CloseAndFlush()

Только проблема осталась неясна. А как в список сервисов добавить готовый экземпляр логгера?
Аноним 18/02/23 Суб 23:19:40 #332 №2616044 
1603375086badcat.gif
>>2616032
Итак,

Вот я конфигурирую логгер
Log.Logger = New Serilog.LoggerConfiguration().CreateLogger
Log — статический
в Log.Logger помещается новый экземпляр ILogger

В конфигураторе сервисов я пишу
services.AddSingleton(Log.Logger)
Разве сюда не должен помещаться мой экземпляр логгера?
Почему по факту при попытке от хоста поулчить сервис ILogger возвращается другой экземпляр?
Аноним 19/02/23 Вск 00:55:45 #333 №2616132 
>>2616044
Короче, все зависит от порядка конфигураций.

- Сначала конфигурируется и создается логгер
- Затем добавляется в статическое поле Log.Logger
- Затем конфигурируются сервисы, где добавляется в коллекцию как синглтон этот самый экземпляр Log.Logger
- И только потом волшебное заклинание
host_Builder.ConfigureLogging(log_builder => log_builder.AddSerilog)
Аноним 19/02/23 Вск 06:34:53 #334 №2616210 
Чет мне лень учить впф, решил быстренько склепать приложение на виндовс формах.
Но тут вечная проблема с dependency injection, я короче, решил сделать чет похожее на mvp паттерн, но чтобы нормально внедрять зависимости создал фабрику для презентеров и получать форму через презентер, эт нормальный подход?
Аноним 19/02/23 Вск 06:45:13 #335 №2616212 
>>2616210
Никто не запрещает, я делают подобное в своих хеллоуворлдах.
Аноним 19/02/23 Вск 11:52:21 #336 №2616394 
>>2616210
но нормальнее понять WPF и все.
даже если писать в нем в стиле формочек
Аноним 19/02/23 Вск 11:52:25 #337 №2616395 
На собесах на джуна дают крутить в голове деревья? Сейчас решаю на литкоде задачи уровня easy/middle (если конечно она не на бинарные операции), но как доходит к деревьям, даже бинарным, и рекурсиям - ловлю дикие тормоза.
Есть ли где-то "туториал" как поставить драйвера на деревья?
Аноним 19/02/23 Вск 11:58:53 #338 №2616399 
>>2616012
>Боюсь имаджинировать как рабоатет Nlog.

Нормально работает. Чуть проблемнее если нужна интеграция. Например асп.нет. Можно положить болт на местный ILogger и просто забыть про его существование (юзать NLog напрямую как его и юзают), а можно хотеть юзать ILogger и тогда нужно выхлоп этого логгера загонять в Nlog/Serilog) что тоже просто ведь это давно сделано и потому сворачивается в простое типа services.Add
app.Use
Аноним 19/02/23 Вск 12:13:14 #339 №2616407 
>>2616395
>На собесах на джуна
Сейчас не существует собесов на джуна.
>>2616395
>дают крутить в голове деревья?
Обычно нет. Обычно дают задачки на async/await или многопоточность. В стиле "Если мы вот ебанем несколько асинхронных методов, то что выполнится в первую очередь, что во вторую, а что вообще не успеет. И как исправить, чтобы было правильно"
Еще популярны задачки на linq. Причем с подковырками lazy вычислений.
Так же популярны задачи на рефакторинг. Дадут какой-нибудь дерьмовый класс и спросят что тебе в нем не нравится, как бы ты его переписал, какие бы паттерны применил и т.д.
Аноним 19/02/23 Вск 13:24:49 #340 №2616476 
>>2616210
А как на любом уровне приложения грамотно завершить его?

Ну вот возникла у меня фатальная ошибка, что делать-то? До основания Application путь не близкий.
Или поэтому не плодят Try Catch?
Аноним 19/02/23 Вск 13:45:45 #341 №2616494 
Стикер
>>2616399
Меня больше смущают причуды этого логгера.
Например в конфиге json распознаются \n, \t, а в конфиге кодом — нет.

Ограничил Microsoft.Hosting.Lifetime до уровня Error, а оттуда все равно выводятся логи, хотя лично мои логи ограничены. Почему? Хрен знает.
Причем пакеты Serilog.Sinks.Debug и Serilog.Sinks.File работают по разному при тех же конфигах. Почему-то Microsoft.Hosting.Lifetime не лезет срать в файл, если ограничить.

Я два дня ебусь с этим серилогом, и мог бы уже свой написать, наверно, со всеми нужными плюшками (которых не получил). Ну теперь уж время потеряно.

>юзать NLog напрямую как его и юзают
Необязательно пихать в сервисы? А как же хваленая DI замена сервисов на лету? Опять меня наебали сказками.
Аноним 19/02/23 Вск 14:16:45 #342 №2616526 
>>2616476
Делаем сервис IApplictaion
Аноним 19/02/23 Вск 14:22:06 #343 №2616533 
>>2615939
А в чём прикол размещать свойства и события уже после конструктора???
Аноним 19/02/23 Вск 14:51:24 #344 №2616559 
>>2616494
>А как же хваленая DI замена сервисов на лету?
ну типа если у тебя логгер получаешь через DI то ты типа можешь его поменять на другой. Вот только зачем. Логгер это просто именованный источник событий и если тебе нужно чтобы он писал в другое место - ну так в другом месте и перенаправляешь вывод. А потому нет смысла его замены и логгеры можно создавать на месте.

я не приемлю логгер через конструктор. это засирание параметров, хз что делать если нужно вложенный логгер, нельзя дать нормальное имя.
Аноним 19/02/23 Вск 14:53:03 #345 №2616562 
>>2616494
единственная причина мне смотреть на ILogger - если я хочу получить события которыми сам фреймворк в него какает. Тогда нужно заворачивать. Иначе нафиг он не нужен.
Аноним 19/02/23 Вск 15:23:22 #346 №2616618 
Можно вообще добавлять в IServiceCollection готовый экземпляр класса? У него нет никаких параметров в конструкторе.
Аноним 19/02/23 Вск 15:39:09 #347 №2616639 
>>2616618
Да
Аноним 19/02/23 Вск 15:56:23 #348 №2616682 
>>2616639
А как? Мне не дает это сделать.

Я взял и добавил в класс статическое свойство с ссылкой на рабочий экземпляр. Но AddSingleton не дает мне обратиться ни к одному свойству класса ApplicationManger. Вот так правильно:
services.AddSingleton(Of IApplicationService, ApplicationManger)
А так ошибка:
services.AddSingleton(Of IApplicationService, ApplicationManger.ActiveManager)

Не дает даже точку поставить — сразу ошибка
Аноним 19/02/23 Вск 16:00:09 #349 №2616693 
>>2616682
С языком обосрался. Короче у меня эквивалент вот этого.
Работает:
services.AddSingleton<IApplicationService, ApplicationManger>();
Не работает:
services.AddSingleton<IApplicationService, ApplicationManger.ActiveManager>();
Аноним 19/02/23 Вск 16:08:16 #350 №2616705 
>>2616693
опять ты что то мудришь
это же экземпляр. его передают как параметр

services.AddSingleton(obj);
services.AddSingleton<IMyInterface>(obj);
Аноним 19/02/23 Вск 16:12:23 #351 №2616707 
>>2616705
Ах тыж, точно.
Аноним 19/02/23 Вск 16:28:19 #352 №2616723 
Раз заговорили о логах. Как быть с различными айдишниками, если их нужно писать в логи? И если при этом логи могут отправляться на сторонние сайты?

Вот думаю может использовать ассиметричное шифрование? В дебаг-моде данные будут логироваться в открытом виде. Если мне нужно будет чекнуть на сервере логи и определить ошибку связанную с конкретным аккаунтом, то я их расшифрую закрытым ключом.
Аноним 19/02/23 Вск 16:31:30 #353 №2616726 
Без названия (8).jpeg
>>2616723
Аноним 19/02/23 Вск 16:37:09 #354 №2616732 
>>2616723
этого мало. шифруй все и еще скрывай сам сам факт логгирования. подмешивай /dev/random рэндомно, чтобы никто не смог расшифровать если у тебя ключ украдут.

А если серьезно, то в логах не должно быть чувствительной информации и айди к ним точно не относится - тем более если он внутренний с внешним не связать (хотя и это уже паранойя)
Аноним 19/02/23 Вск 16:39:05 #355 №2616733 
>>2616732
> тем более если он внутренний с внешним не связать (хотя и это уже паранойя)
А если пользователь зарегистрировался на сайте через Facebook и я хочу залогировать этот момент вместе с Facebook ID? Или фейсбук айди лучше убрать нафиг?
Аноним 19/02/23 Вск 22:08:09 #356 №2617245 
>>2616733
У этого пользователя должен быть какой-то внутренний Id в твоём приложении. Вот его в логи и пиши. А фейсбучный Id связывай с ним и храни где-то внутри программы в БД (если он тебе конечно нужен)
Аноним 20/02/23 Пнд 01:10:46 #357 №2617344 
2023-02-2001-07-34.png
Короч, помните, я писал, что у меня была проблема, когда была куча сервисов, но никто из них не был инициатором?

Так вот есть в Microsoft.Extensions.DependencyInjection
метод ActivatorUtilities.CreateInstance, который делает определенный сервис активатором.

Непонятно чем это отличается от обычного вызова нужного сервиса. Видимо для сомневающихся, типа меня.
Аноним 20/02/23 Пнд 01:34:33 #358 №2617347 
>>2617344
... ах да, и тип вызываемого сервиса не должен быть интерфейсом, как на пикрил, а оригинальным классом. Это классическая ошибка.

Так, что использование данного подхода накладывает свои ограничения.
Аноним 20/02/23 Пнд 05:11:57 #359 №2617386 
Подскажите аноны, хочу скачать веб страницу
проблема в том что сайт отдает html страницу сразу, и через пару секунд только подгружает в неё данные, видимо скриптами
Как можно решить эту проблему в webClient? или куда копать?
Аноним 20/02/23 Пнд 06:58:30 #360 №2617403 
>>2617386
Докатился до хромдрайвера вместо WebClient, судя по всему проблема решена
Аноним 20/02/23 Пнд 11:38:58 #361 №2617486 
>>2617344
>Непонятно чем это отличается от обычного вызова нужного сервиса
Обычный вызов сервиса не позволяет передать свои параметры. Это специальный утилитный метод для одноразового использования.

ты передаешь ей параметры и она заполняет конструктор параметрами из контейнера и твоими параметрами.

Для многоразового нужно использовать методы рядом вида ActivatorUtilities.CreateFactory
Аноним 20/02/23 Пнд 11:46:53 #362 №2617493 
>>2617347
Бляяяя, какая же это ебань.

Т.е. существует два ILogger — один от Serilog, другой Microsoft.Extensions.Logging.

Именно поэтому мне в дебаг срал майрософт, игнорировав ограничения уровней. Я использовал Serilog.ILogger затем .ForContext(typeof (T)), а дефолтный может на ходу получить ILogger<T>.

Дефолтный даже в сервисах прописывать не надо, хост его все равно выдаст, как и конфиги.
Аноним 20/02/23 Пнд 11:47:43 #363 №2617495 
>>2617486
Понял, интересно.
Аноним 20/02/23 Пнд 12:36:59 #364 №2617525 
>>2617493
Когда я вызываю IServiceProvider.Dispose, должен ли он автоматом диспозить сервисы?
Аноним 20/02/23 Пнд 13:46:12 #365 №2617592 
загадка века:
Каст к IDisposable вызывает Dispose автоматом
Аноним 20/02/23 Пнд 14:39:44 #366 №2617658 
Как заставить ебучий шарп освободить память, чтобы у меня прога не улетала в out of memory? Генерирую строку, потом из неё flowdocunent, из него xps document и наконец его в pdf. Нахуярил using у всех disposable объектов, вызываю сборщик, но один хуй память захламляется и всё
Аноним 20/02/23 Пнд 14:55:56 #367 №2617672 
>>2617594
Короче при IServiceProvider.Dispose автоматом диспозятся все сервисы, кроме одного. Это я уже проверил, даже если это синглтон.

Суть моей проблемы:
Мне нужно закрыть приложение из любого сервиса. У меня есть условный базовый сервис ApplicationService у которого есть метод async Shutdown, который закрывает приложение, завершает соединение с именованным каналом + диспозит сервисы.

Я предполагал, что любой сервис, если ему надо закрыть приложение, обращается к IApplicationService.Shutdown, но сам сервис, вызывающий сей метод отказывается диспозиться. Хз как это разруливать. Так-то при закрытии приложения всё равно всё уничтожится, но что если мне надо задиспозить без закрытия приложения?

Сперва у меня было реализовано при помощи событий и все работало, но сама система подписок очень геморная. Это надо делать подписку на каждый сервис.
Аноним 20/02/23 Пнд 15:00:14 #368 №2617678 
>>2617658
Небось дрочеш используешь string?
А ты разве не знал, что любая операция со строками создает новый экземпляр строки?
Если ты PDF составляешь стрингами через всякие циклы, то я боюсь имаджинировать ебало твоего ПК.
Аноним 20/02/23 Пнд 15:04:56 #369 №2617691 
>>2617672
>но сам сервис, вызывающий сей метод отказывается диспозиться
почему?
Аноним 20/02/23 Пнд 15:07:03 #370 №2617693 
bandicam 2023-02-20 15-03-05-434.mp4
bandicam 2023-02-20 15-01-15-279.mp4
>>2617678
https://youtu.be/95AlosM6Ka0
Аноним 20/02/23 Пнд 15:15:16 #371 №2617705 
>>2617678
больше проблем от всяких MemoryStream, а не от строк.
Аноним 20/02/23 Пнд 15:17:19 #372 №2617708 
>>2617691
Я это и хочу выяснить.

Сервис не диспозился, поэтому я решил задиспозить его вручную перед строкой IServiceProvider.Dispose.

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

Я не знаю что не дает ему диспозиться.
Аноним 20/02/23 Пнд 15:17:47 #373 №2617709 
image
Пытаюсь определиться с единым стилем логов. Какой вариант из трёх лучше? Пока думаю 3й оставить (комбинация 1 и 2), вроде лучше читается.

Основная загвоздка в отображении параметров:

[Payment] Initiate transaction with product 'coins_1500'. Order '435345345345'

[Payment] Initiate transaction. Product 'coins_1500'. Order '435345345345'

[Payment] Initiate transaction: product='coins_1500', order='435345345345'
Аноним 20/02/23 Пнд 15:19:39 #374 №2617710 
>>2617708
Сервис который просит выгрузки приложения ничем не отличается от других сервисов. Ведь IApplicationService.Shutdown не является блокирующим
Аноним 20/02/23 Пнд 15:23:41 #375 №2617714 
2023-02-2015-23-15.png
>>2617709
Мой стиль
Аноним 20/02/23 Пнд 15:24:42 #376 №2617717 
>>2617678
String использую один раз, он отжирает в районе 500 мб, дальше всякие методы из фреймворка XamlReader.Load, SaveAsXaml - что там у них в коде хуй знает
Аноним 20/02/23 Пнд 15:30:16 #377 №2617723 
>>2617717
>String использую один раз, он отжирает в районе 500 мб
Есть еще понятие страниц в памяти и прочего. Т.е. твой стринг может зарезервировать больше места.

Может тебе нужен массив? Или конвертировать как-то частями.
Аноним 20/02/23 Пнд 15:33:12 #378 №2617726 
>>2617723
>Может тебе нужен массив?
У меня выбора нет, string возвращает метод из dll
Аноним 20/02/23 Пнд 15:35:29 #379 №2617732 
>>2617726
Не забывайте про LOH же
Аноним 20/02/23 Пнд 15:48:28 #380 №2617749 
>>2617732
У меня и нет лохов, иначе их сборщик подчистил бы, скорее всего куча всякого мелкого говна
Аноним 20/02/23 Пнд 15:53:07 #381 №2617752 
>>2617749
С чего бы сборщику чистить LOH
LOH такая структура что выделишь ты объект на 100 мегабайт, потом его удалишь, объект исчезнет, а выделенная память останется.

GC не сжимает LOH самостоятельно. Его нужно об этом просить явно.

Потому и приходится использовать разные ChunkedList/ChunkedMemoryStream и Marshal.AllocHGlobal чтобы не быть лохом с LOH
Аноним 20/02/23 Пнд 16:06:40 #382 №2617757 
2023-02-2015-53-06.png
>>2617710
Раз уж я настроил логгирование. Вот отчет с комментариями.
Синим подсвечено то, что пишет лог в пределах одного метода.
Т.е. видно, что метод ожидает завершения ShutdownAsync, хотя я не прописывал await.

Ща буду разбираться почему.
Аноним 20/02/23 Пнд 16:08:51 #383 №2617761 
>>2617752
И как это делать, если память жрут не твои методы, а кал из фреймворка?
Аноним 20/02/23 Пнд 16:10:39 #384 №2617762 
>>2617761
а dll нативная? может она не стринг возвращает?
Аноним 20/02/23 Пнд 16:12:06 #385 №2617765 
>>2617761
Я просто напомнил про LOH
Смотри же профайлером кто чего память, а не гадай
Если это LOH то Dispose не поможет, нуюны доп усилия

Но сначала профайлер
Аноним 20/02/23 Пнд 16:14:13 #386 №2617771 
>>2617762
>а dll нативная
Которая string возвращает это хуита из dot.liquid, остальные охуевшие методы из фреймворка
>может она не стринг возвращает?
Ну сигнатуру-то я вижу
Аноним 20/02/23 Пнд 16:19:48 #387 №2617780 
2023-02-2016-18-10.png
>>2617757
Хм, почему-то метод ShutdownAsync из другого сервиса не воспринимается асинхронным.
Для примера, WindowServiceCounter - асинхронный
Аноним 20/02/23 Пнд 16:20:47 #388 №2617783 
>>2617757
какой еще ShutdownAsync
зачем сервису ждать окончания Shutdown

любой код должен вызывать Shutdown() и забыть. Семантика как и у CancellationtokenSource.Cancel()
Аноним 20/02/23 Пнд 16:25:34 #389 №2617789 
>>2617783
>зачем сервису ждать окончания Shutdown
Так я специально писал так, чтобы он не ждал. Метод асинхронный, но вызывается без await.
А как еще? Вызывать синхронно?

>Семантика как и у CancellationtokenSource.Cancel()
Т.е. Async? Из ачем не токен, если я ничего не собираюсь отменять.
Аноним 20/02/23 Пнд 16:26:13 #390 №2617791 
>>2617789
>И зачем мне токен*
Аноним 20/02/23 Пнд 16:29:45 #391 №2617797 
>>2617765
Буду смотреть, хули остаётся
Аноним 20/02/23 Пнд 16:42:14 #392 №2617810 
>>2617789
ты же понимаешь что сервис который дергает Shutdown() НЕ ОТЛИЧАЕТСЯ от других сервисов? вообще ничем. А значит ты что то накосячил.

про семантику CancellationtokenSource.Cancel() я упомянул что у
Shutdown() должна быть такая же семантика - вызвал и ПОШЕЛ ДАЛЬШЕ.

>Метод асинхронный, но вызывается без await.
без реализации это ни о чем не говорит. До первого await в асинхронном методе он вызывается синхронно.

Впрочем даже тогда ничего не мешает вызвать Dispose.

А значит
а) сделай нормальную семантику. убери Async и пусть будет Shudown() (или любое другое типа стартшутдаун и тому подобное)
б) вызови Shudown из другого класса и смотри поведение.
Аноним 20/02/23 Пнд 17:18:02 #393 №2617851 
>>2617761
Писать свою либку. Нам в команде, к примеру, пришлось запилить свою внутреннюю либку для потокового парсинга/генерации Excel, так так все имеющиеся решения жрали ОЗУ как не в себя и отваливались по OOM на 10k строк. А у нас, бывает, пользователи и по 100-150k грузят. Нынешнее же решение вполне себя живет в подах с лимитом ОЗУ в 1Gb.
Аноним 20/02/23 Пнд 17:25:27 #394 №2617859 
>>2617810
>ты же понимаешь что сервис который дергает Shutdown() НЕ ОТЛИЧАЕТСЯ от других сервисов?
Отличается хотя бы апартаментным состоянием потока. Виндовс менеджер запускает окна и имеет STAThread. Соответственно остальные сервисы находятся в MTAThread и между собой проблем не имеют.

[DBG 17:13:29:877 WindowsManagement.WindowService] Apartment State Thread: STA
[DBG 17:13:30:025 Outliner.ApplicationManager] Apartment State Thread: MTA

При этом я напрямую запускал метод из другого потока и пох, за исключением игнора факта, что метод асинхронный. Вскрылось когда запустил Shutdown() через Task.Run() и прилетело исключение. Я нигде не указывал явно аргумент STAThread, оно как-то само.

Так щито теперь делать? не делать же все остальные сервисы под STA?
Аноним 20/02/23 Пнд 17:25:51 #395 №2617860 
Как жто не существует собесов на джуна, а как устроиться на работу тогда?
Аноним 20/02/23 Пнд 17:35:39 #396 №2617874 
>>2617859
>апартаментным состоянием потока.
хз имеет к вызову Dispose?
но надеюсь метод Shutdown() НЕ делает сам работу по выгрузке приложения и Dispose, а является всего лишь что то типа
_cancellationTokenSource.Cancel()
_complettionTaskSource.TrySetResult()
_resetEvent.Set()
и так далее.
Аноним 20/02/23 Пнд 17:39:35 #397 №2617881 
https://www.youtube.com/watch?v=w8rRhAup4kg

что думает тред об этом высере?
Аноним 20/02/23 Пнд 17:46:27 #398 №2617889 
>>2617860
Становись сразу мидлом.
Аноним 20/02/23 Пнд 17:52:03 #399 №2617897 
>>2617881
Думаю, что понял откуда последние пару лет в шарпе аномальное количество вкатунов 18-22 лет
Аноним 20/02/23 Пнд 17:53:50 #400 №2617901 
image.png
>>2617881
Этот чел владеет геймдев студией. На пике их самые лучшие проекты (из 150-ти штук).
Я думаю качество материала в видео примерно такое же.
Аноним 20/02/23 Пнд 17:56:44 #401 №2617907 
>>2617901
>>2617897
пойдет для начального вката до понимания ссылок в шапке?
нужен просто толчок
Аноним 20/02/23 Пнд 18:52:16 #402 №2617994 
>>2617874
ССССССССУУУУУУУУУУУУУУУУУУККККККККККККККАААААААААААААААА
Целый день, блять. Целый ебаный день убил на ХУЙНЮ.

Все из-за одной строчки
ActivatorUtilities.CreateInstance<WindowService>(ServiceHost.Services)
вместо должного
ServiceHost.Services.GetService<IWindowService>

Я такой, значит, повторно пытаюсь получить у хоста WindowService, который на минуточку СИНГЛТОН, а он мне возвращает еще один экземпляр.
И все, кстати, у меня там в STAThread. Это Task.Run() запустил метод в MTA

>complettionTaskSource
Я так делал. Но я же могу тогда уж сразу юзать complettionTaskSource.TrySetResult(), вместо Shutdown()?
Аноним 20/02/23 Пнд 19:09:31 #403 №2618027 
>>2617881
>что думает тред об этом высере?
Скрыл из рекомендованного по двум причинам (даже не смотря ни секунды).
1. В названии написано "слив"
2. В названии написано "лучшего"

Я не домохозяйка, чтобы вестись на подобный байт инфоцыгана.
Аноним 20/02/23 Пнд 19:13:48 #404 №2618029 
>>2617907
А если в названии нет кричащих слов, то не интересно?
Ты хочешь 10 часов воды навернуть? Почему ты не хочешь загуглить что-то проще и попытаться хотя бы создать проект?
Аноним 20/02/23 Пнд 19:22:59 #405 №2618037 
>>2618029
В таких видосах скомпилирована минимальная инфа для толчка.
Аноним 20/02/23 Пнд 19:26:56 #406 №2618041 
>>2617994
Ну да. Откуда контейнеру знать про создание сервиса с помощью утилитного метода. Смысл утилитного метода - тупая фабрика, цель которой рокинуть параметры из контейнера в создаваемый объект и он знать не знает про время жизни создаваемого объекта

Я про то что цель метода applicationservice.shutdown всего лишь послать событие "тут попросили выгрузки " любым способом
А уже в нужном месте кто то ждет этого события и выгрузит в правильном контексте даже если это в том же классе

То есть дополнительный уровень косвенности похволит избежать возможных трудноуловимых проблем
Аноним 20/02/23 Пнд 19:28:58 #407 №2618048 
>>2618037
Хз, чел. Я вообще начинал со скриптов, я просто писал мелочи и постепенно продвигался дальше. Только потом начал писать самостоятельные программы.

SimpleCode смотрел?
https://youtu.be/KyFWqbRfWIA?list=PLQOaTSbfxUtD6kMmAYc8Fooqya3pjLs1N
Аноним 20/02/23 Пнд 19:31:43 #408 №2618051 
>>2618041
Кстати, подписка мне здесь больше нарвится именно в таком исполнении. Спасибо.
Аноним 20/02/23 Пнд 19:34:15 #409 №2618055 
cMh2-tmWSEo.jpg
>>2618037
>для толчка

Соглы
Аноним 20/02/23 Пнд 19:39:23 #410 №2618057 
>>2618048
100 роликов...
Аноним 20/02/23 Пнд 19:41:14 #411 №2618059 
Здесь есть люди, которые разбираются в навигации по страницам приложения при помощи frame? Я не могу понять, почему у меня после перехода на другую страницу вью моделька предыдущей не удаляется. В этой вью модельке есть mediaelement, проигрывающий музыку, и эта самая музыка после перемещения продолжает играть.
Путем экспериментов с финализатором понял, что вью модель удаляется только после повторного захода на страницу и ухода с нее. Видимо где-то есть буфер, вмещающий одну страницу. Вопрос где.
Аноним 20/02/23 Пнд 19:47:06 #412 №2618066 
>>2618059
Frame для мазохистов
Аноним 20/02/23 Пнд 20:24:00 #413 №2618106 
>>2618059
Мало информации. Ты же высвобождаешь нужные ресурсы?
Ты контент старницы контролируешь? Можешь добраться до каждого итема? Или это какой-то хромиум?
Аноним 20/02/23 Пнд 20:47:02 #414 №2618123 
>>2618106
> Ты же высвобождаешь нужные ресурсы?
Что ты под этим подразумеваешь? При нажатии на кнопку я вызываю Frame.NavigateTo(targettype) и всё.
> Ты контент старницы контролируешь? Можешь добраться до каждого итема?
Да, да.
Аноним 20/02/23 Пнд 21:43:43 #415 №2618158 
>>2618123
>Что ты под этим подразумеваешь?
Реализация IDisposable и метод Dispose. В этом методе ты проходишься по всем вещам твоей страницы, которые GC не удаляет, потому что они по тем или иными причинам продолжают существовать. Например:
- Подписки на события (за исключением слабосвязанных — тех что создаются в XAML)
- Свойства с делегатами
- Bitmap-ы
- Скорее всего твой медиаконтент

Ты должен напрямую обратиться к плееру, и как минимум остановить его, отсоединить медиконтент, который он проигрывает.

У меня был случай, когда я активировал таймер, который срал в консоль. И я решил тупо очистить переменную, в которой находился экземпляр класса с запущенным таймером, присвоив null. А таймер продолжал срать в консоль, и пока он срет, CG не может удалить класс.

Или когда я подписки не чистил и при каждом создании окна у меня приложение начинало все больше и больше тормозить.

Умные люди используют лайфтаймы, чтобы меньше головной боли было с контролем всего этого, но это уже другой уровень.
Аноним 20/02/23 Пнд 21:45:28 #416 №2618159 
>>2618123
https://stackoverflow.com/questions/61297387/how-to-dispose-correctly-an-uwp-mediaplayer
Аноним 20/02/23 Пнд 23:08:34 #417 №2618215 
2023-02-2023-07-54.png
Почему ругается? В печать норм выводит, все распознает.

Предупреждение CA2017 Количество параметров, указанных в шаблоне сообщения о ведении журнала, не соответствует количеству именованных заполнителей
Аноним 21/02/23 Втр 06:24:20 #418 №2618350 
>>2618158
Я добавлял dispose, обнулял source у медиаконтента, всё одно. Более того, я сейчас просто убрал медиаконтент, и это никак не повлияло на общую ситуацию. То есть проблема явно где-то вне класса.
Аноним 21/02/23 Втр 08:02:33 #419 №2618365 
>>2617851
Сомневаюсь, что я в одно ебало высру конвертер в xps и pdf, такие решения вполне себе за деньги продают
Аноним 21/02/23 Втр 08:40:01 #420 №2618376 
>>2618215

Фигурные скобки не нужны - ты так один объект с 2 полями передаешь а не 2 параметра.
Аноним 21/02/23 Втр 13:18:48 #421 №2618531 
Ребят, работал кто с SOAP запросами?
Целую неделю ебусь, не могу понять как эту хуйню сделать.
Дали WSDL, добавил референс в проект, вроде заполнил все нужные данные, запускаю -- он мне на Security Header ругается.
В примерах запроса которые мне отправили заголовок вообще подписывается как я понял с помощью Х509 сертификата.
Все перегуглил, но все равно нихуя не понятно. Есть инфа как добавить сам заголовок, но как добавлять ПОДПИСАННЫЙ заголовок, так еще и с помощью сертификата (у меня он есть, я еще подписываю тело с его помощью)
Типа, если отдельно подписать и добавлять в заголовок то что подписывать то? Тело? Так оно уже подписано отдельно
Аноним 21/02/23 Втр 15:35:26 #422 №2618721 
>>2618376
Это бейсик, так передается массив.
В общем, очередной глюк студии.
Аноним 21/02/23 Втр 15:45:33 #423 №2618728 
изображение.png
изображение.png
Всем доброго времени суток. Хочу написать класс-бд, в котором будет храниться статический лист. Потом для этого класса написать репозиторий для добавления/обновления и получения данных. Вопрос такой: куда этот класс положить, в слой DAL или куда его? На первом скрине - структура проекта, на втором скрине класс, который хочу порезать на класс-бд (статическое поле).
Аноним 21/02/23 Втр 15:47:25 #424 №2618732 
Вот если я пишу это
Environment.SetEnvironmentVariable("DOTNET_ENVIRONMENT", "Development")

Куда это сохраняется? Запускаю окно переменных среды: в пользовательских ничего нет, в системных тоже.
Что будет, если другое приложение напишет
Environment.SetEnvironmentVariable("DOTNET_ENVIRONMENT", "Production")
Аноним 21/02/23 Втр 15:48:48 #425 №2618734 
>>2618733
пасибо
Аноним 21/02/23 Втр 16:13:55 #426 №2618765 
И как мне применять миграции, если sqlite не поддерживает drop column и alter column?
Аноним 21/02/23 Втр 16:27:02 #427 №2618783 
Анон, будь добр, подскажи по LINQ.
Есть энтити User и UserInterest. У них отношения many-to-many, то есть в User лежит ICollection<UserInterest>, а в UserInterest ICollection<User>. В UserInterest есть проперти string UserInterestName. Также есть дтошка UserDto, где я обрезаю ненужные проперти. Но в нее добавлена новая: List<string> UserInterestNames.

Дальше делаю маппиннг с помощью автомаппера.
CreateMap<User, UserDto>()
.ForMember(dest => dest.UserInterestNames,
opt => opt.MapFrom(

И вот дальше я не понимаю, как написать запрос, чтобы вытащить все UserInterestName из ICollection<UserInterest> в виде List<string>, чтобы маппер их загнал в проперти в UserDto.
Аноним 22/02/23 Срд 02:21:57 #428 №2619278 
>>2618765
Поддерживает
ALTER TABLE <TABLENAME> DROP COLUMN <COLUMNNAME>;
ALTER TABLE <TABLENAME> RENAME COLUMN <COLUMNNAME> TO <NEWCOLUMNNAME>;
Аноним 22/02/23 Срд 05:20:42 #429 №2619293 
>>2619278
Только это поддерживается начиная с .net 5, а я на 3.1...
Аноним 22/02/23 Срд 07:02:47 #430 №2619303 
>>2619293
мне всегда было интересно. почему люди мазохисты?
ну ладно переход с 4.8 на кор может быть проблемным, но с 3.1 до 7 поднять - просто сменить версию дотнета. (ну кроме WPF, там чуть чуть намутили, но кто пишет на WPF....кроме меня)
Аноним 22/02/23 Срд 07:04:24 #431 №2619304 
>>2619303
Uwp не поддерживает версию выше 3.1
Аноним 22/02/23 Срд 07:15:53 #432 №2619307 
>>2619304
А еще WPF ругают типа легаси
а он еще всех переживет )
Аноним 22/02/23 Срд 09:52:01 #433 №2619416 
>>2619293
Значит делаешь миграцию как диды:
1) Create new table
2) Copy data
3) Drop old table
4) Rename new into old
Аноним 22/02/23 Срд 10:59:42 #434 №2619455 
>>2619439
Охуенно, ставить SQL Server ради десктопной утилиты.
Аноним 22/02/23 Срд 11:06:42 #435 №2619460 
>>2619455
есть еще firebird как ембедед. Сильно лучше чем склайт, но файрберд.
Аноним 22/02/23 Срд 11:27:11 #436 №2619478 
Image 1.png
>>2619468
ну так то базы разные. первое - огрызок для "надо самый минимум", а второе - полноценная версионная база данных.

При закрытии sqlite журнал вливается в базу данных
Сделай в sqlite WAL mode (и не вливай журнал в базу) и размер то другим будет.

вот пик у меня прямо щас. после закрытия бд журнал конечно исчезнет потому что sqlite так задуман, а файрберд оптимизацией занимается по мере необходимости ибо как бы настоящая бд.
Аноним 22/02/23 Срд 11:34:10 #437 №2619484 
>>2618783
Бумп. Перегуглил все интернеты, но так ничего и не нашел.
Аноним 22/02/23 Срд 15:07:41 #438 №2619635 
chat.png
>>2619484
Аноним 22/02/23 Срд 17:00:42 #439 №2619727 
Поясните про SetBasePath в ConfigurationBuilder.

Этим методом устанавливается путь к директории, из которой будут читаться сеттинги, куда будут сохраняться логи и т.д. Почему во всех туториалах прописывают Environment.CurrentDirectory — место откуда запускается приложение, ведь хранить данные в ProgramFiles не рекомендуется.

Разве это не должна быть какая нибудь AppData? Следом возникает второй вопрос. Есть appsettings.json с дефолтными настройками, а есть appsettings.Prodaction.json, appsettings.Development.json. Первый файл должен храниться в папке с приложением, два последних в AppData. Но с SetBasePath подразумевается, что все три файла должны находиться в одном месте.

Как это вообще происходит? При первом запуске приложения папка с юзердатой копируется в AppData и уже она ставится в качестве BasePath? Я никогда не видел нескольких файлов appsettings — этот файл всегда один, но в разных местах.
Аноним 22/02/23 Срд 17:28:27 #440 №2619765 
>>2619635
Он пытался, но: "Missing map from System.Char to System.String. Create using CreateMap<Char, String>. Офк, создание такой мапы не помогает и ругается, что у string нет дефолтного конструктора. В SelectMany почему-то прилетает IEnumerable<char>, а не стринг.
Аноним 22/02/23 Срд 17:30:47 #441 №2619768 
>>2619727
Environment.CurrentDirectory это не "где лежит ехешник"
это рабочая папка.
Аноним 22/02/23 Срд 17:46:55 #442 №2619798 
>>2619768
А кто определяет где находится рабочая папка?
Аноним 22/02/23 Срд 18:00:21 #443 №2619829 
>>2619798
портабельное приложение - папку ищем относительно ехешника

системное приложение - у нас есть папка /etc или ProgramData под виндой

пользовательское приложение - у нас есть профиль пользователя

сервис какой (тот же асп.нет приложуха) - пользователь решает где рабочая папка. А как он нам ее сообщит? через переменную окружения - вот и есть такая переменная. Если мы пишем батник какой то там ее прописываем эту папку, иначе она будет смотреть на system32 что ли. При запуске ручками она будет равна текущей папке где находится пользователь, что приводит к "не могу найти файл", но это проблемы пользователя.

так что где чего - зависит от типа приложения
Аноним 22/02/23 Срд 18:02:40 #444 №2619833 
>>2619798
и конечно никто не запрещает тебе задать путь к конфигам относительно ехешника и попутно использовать заданную рабочую папку для рабочих файлов
Аноним 22/02/23 Срд 18:25:14 #445 №2619865 
2023-02-2218-10-56.png
2023-02-2218-20-47.png
>>2619829
Это я всё понимаю. Вот если бы я не смотрел туторы по IConfiguration, все было бы проще.

Объясни мне логику пикрил. Почему у автора appsettings.json appsettings.Production.json находятся в одной куче? Это какой-то каргокульт ASP? Если что, это WPF-приложение и вряд ли оно портабельное.

Пользователь открывает условную CurrentDirectory, а там два файла
appsettings.json
appsettings.Production.json
Я такого нигде не видел. Мне предлагают вот это воспринимать как что-то естественное? А если CurrentDirectory удалится? Что делать?
Аноним 22/02/23 Срд 18:34:09 #446 №2619876 
>>2619865
Мне бомбит, что все туторы сделаны по одному шаблону. Допустим это пользовательское приложение.
В моем понимании appsettings.json должен быть изолирован от изменений. Он должен находиться в папке с приложением.

В то время как appsettings.Production.json должен находиться в ProgramData или AppData. И не иметь ебанутой подписи Production

Кроме того. Мне сообщают, что если IConfiguration не находит файл appsettings.Production.json, он читает данные из appsettings.json.
Хорошо, а как быть с сохранением? appsettings.Production.json по прежнему отсутствует. Куда будет запись? В дефолтный файл? <сарказм> Охуенно! </сарказм>

И ответы на эти, казалось бы, базовые вопросы ни один тутор не дает.
Аноним 22/02/23 Срд 18:35:51 #447 №2619880 
>>2619865
не понимаю вопроса
все эти development/production/(иногда staging) - самая что ни на есть норма. есть основной конфиг, а сверху мержится доп конфиг который зависит от окружения.


>А если CurrentDirectory удалится? Что делать?
а если удалить c:\windows? значит упадет с сообщением что файл не найден.

А то что у автора WPF - ничего не значит. значит он так решил. Это не по гайдам, но такая его хотелка. Чай не публичный софт делает. А значит делает как ему удобно.

>>2619876
обычно это сервисы/вебсайты и тому подобное - там такое разделение норма. чел просто не хочет делать по другому. И нет никакого смысла файлы кидать куда то далеко чтобы потом ходить искать? зачем.
Аноним 22/02/23 Срд 18:36:30 #448 №2619882 
>>2619876
>Хорошо, а как быть с сохранением
НИКАК. эта конфигурация не умеет сохранять. Конфиги правятся в блокнотике.
Аноним 22/02/23 Срд 18:39:06 #449 №2619885 
>>2619876
Допустим, я хочу сделать так, как я сам себе это изначальн опредставлял.
В папке с приложением у меня хранятся дефолтные конфиги. При первом запуске я их копирую в AppData и устанавливаю эту папку как CurrentDirectory.
Дальше, если нужно сбросить конфиги, то я копирую из папки с приложением оригинал.

Тогда вопрос а НАХУЯ эта возня с appsettings.Production.json? В чем хитрый план?
Аноним 22/02/23 Срд 18:42:51 #450 №2619891 
>>2619880
>самая что ни на есть норма
В вебе? Возможно, но я перелопатил все установленыне приложения у себя и не нашел подобного подхода.

>а если удалить c:\windows?
CurrentDirectory в данном случае это данные из AppData. Нафиг тогда бэкапы конфигов делают?


>А значит делает как ему удобно.
Это не единственный автор.
Аноним 22/02/23 Срд 18:46:02 #451 №2619898 
>>2619882
>НИКАК. эта конфигурация не умеет сохранять.
Чет я погорячился, да.
Аноним 22/02/23 Срд 18:50:54 #452 №2619902 
>>2619898
Умеет?
Аноним 22/02/23 Срд 18:59:27 #453 №2619916 
>>2619885
>если нужно сбросить конфиги, то я копирую из папки с приложением оригинал.
да как угодно. фломастеры то разные.

> appsettings.Production.json? В чем хитрый план?
позволяет переопределять ключи из основного конфига в зависимости от окружения
https://learn.microsoft.com/ru-ru/aspnet/core/fundamentals/configuration/?view=aspnetcore-7.0#appsettingsjson

нужно для удобства разработки.
Конечно можно просто один файл, но каждый раз править конфиг муторно

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

>CurrentDirectory в данном случае это данные из AppData
CurrentDirectory это рабочая папка и никакого отношения к AppData не имеет. AppData это специальная папка относится к профилю. CurrentDirectory это переменная окружения и позволяет пользователю ее переопределить. Нужно ли это каждый решает сам. Меня вот лично бесит когда софт засирает профиль - у меня десятки гигабайт кешей инсталлеров и прочей херни потому что "ну так решили".
Даже студия срет мама не горюй - в ней хоть можно выключить кеш пакетов и освободить несколько гигов на диске ц

>Нафиг тогда бэкапы конфигов делают?
бэкапы делают потому что бэкапы нужны ). это перпендикулярно

>Это не единственный автор.
да неважно сколько их. они ваяют свое и как считают нужным. Они считают что нафиг не нужен гуи для правки конфига и "юзеру нужно - блокноте подправит и никакой мультипользовательсковсти". Софт он ведь разный бывает.
Аноним 22/02/23 Срд 19:14:11 #454 №2619964 
>>2619885
Чел, так делается в промышленном коде, который нужно постоянно разворачивать на разных стендах. Есть локальные стенды, есть тестовые, есть интеграционные, прелайв, продакшен и дохуя еще всяких. И для всех нужны разные конфиги. Поэтому проще создать пачку для всех и закидывать их либо скопом, либо каждому свой. Потому что никто не будет ебаться и каждый раз на своем стенде сидеть и править конфиг под него.
Аноним 22/02/23 Срд 19:31:53 #455 №2620001 
>>2619916
Ты говришь с позиции веба, сложно это воспринимть.

>Туда же и Production - без него выкатил я на сервер боевой, вбил пароли к бд и все - первый же апдейт легко может снести мои правки.
Это характерно для веба? Хорошо. Если это спроецировать на десктоп, то у меня должно быть так:
appsettings.Backup.json (ну или вариации неминга)
appsettings.json

>Меня вот лично бесит когда софт засирает профиль
У меня не будет там тяжелых данных. Все тяжелое у меня временное и я буду срать этим в Temp. Где еще хранить сеттинги? В ProgramFiles? Как минимуму пользователя не будет уверенности, что там можно что-то править.

>CurrentDirectory это рабочая папка и никакого отношения к AppData не имеет.
Так если у меня в AppData хранятся и сеттинги и логи, то это же можно назвать рабочей папкой? Для чего она предназначена? Или это что-то из разряда, когда пользователь запускает FileDialog, который смотрит\меняет CurrentDirectory?
Аноним 22/02/23 Срд 19:32:41 #456 №2620002 
>>2619964
Понял
Аноним 22/02/23 Срд 19:42:29 #457 №2620021 
>>2619916
>Меня вот лично бесит когда софт засирает профиль
Иначе придется ебаться с правами доступа. Срать в мои документы — те же яйца (если они не переопределены).
Аноним 22/02/23 Срд 19:49:47 #458 №2620037 
>>2620001
>Это характерно для веба?
это характерно если у тебя есть разные окружения где нужно запускать и не хочется пердолится с конфигами.

> Где еще хранить сеттинги?
где хочешь. смотри же на свой софт. Если он у тебя должен становиться в ProgramFiles то значит нужно класть туда где есть права на запись, а это профиль.
Иначе же - ну пусть рядом лежат, проще искать, легко снести все просто стерев папку.
каждому свое.

>>2620021
и что с того. вон жетбрианс хранит инсталлеры в профиле. НАХРЕНА спрашивается. Есть же инсталлер что с веба скачали - зачем плодить дубли. И при этом удалить нельзя - сломается.
идиотизм. (а та же андроид студия - портабельная при этом)

Нужны права? так это ж инсталлеры блин. он все равно для их использования поднятие прав запросит и сорит ими при поднятых правах.
Аноним 22/02/23 Срд 19:52:35 #459 №2620048 
>>2620001
рабочая папка это просто одна из переменных окружения. обычно указывает на текущую папку в шелле или же на какую то системную папку. ну и может быть переопределена ведь это переменная окружения.

И хорошо когда приложение не прибивается гвоздями, а позволяет настроить себя переменными окружения (особенно если это не десктопный софт)
Аноним 23/02/23 Чтв 18:27:30 #460 №2620796 
изображение.png
Всем ку. Имеется вот такой цикл(1 картинка), этот цикл заполняет поле inlineKeyButton. Вопрос такой: имеет ли смысл сделать поле inlineKeyButton static, чтобы вызвать цикл 1 раз и забыть, а потом inlineKeyButton копировать для каждого нового пользователя. Или операции копирования будет такой же ресурсозатратной, как и вызов цикла?
Аноним 23/02/23 Чтв 20:35:40 #461 №2620898 
Аноны, нужна ваша помощь. У меня есть всплывающее окно с listview, чьи элементы содержат кнопки. Кнопки могут быть активны и не активны для каждого состояния свой цвет, реализовал через behavior, при чем они становятся неактивны при нажатии на них (и это работает прекрасно), а активируются в другом всплывающем окне. И вот с последним у меня проблемы. Когда всплывающее окно с кнопкам скрыто (visibility = collapsed), поведение не работает, следовательно цвета не обновляются. Как фиксить?
Аноним 23/02/23 Чтв 21:28:01 #462 №2620947 
пробовал кто заниматься разработкой на юните на шарпе в макоси? Насколько больно?
Аноним 24/02/23 Птн 01:51:02 #463 №2621134 
>>2620947
а ты ждешь ответа что "работать можно" или ожидаешь пожесчте (ибо маковод)?

всегда удивляет когда люди создают себе сложности сами
Аноним 24/02/23 Птн 12:10:40 #464 №2621312 
Почему народ массово пускают слюну на дискриминирующие объединения, чем не устраивает возврат нескольких out аргументов в try методе? До кучи пусть ещё этот трай возвращает не бул, а какой-нибудь частный енум. Штатно, быстро, понятно, ожидаемо. Нет, пипл хочет нового сахарка в свои смузи.
Аноним 24/02/23 Птн 12:15:56 #465 №2621317 
>>2621312
>Почему народ массово пускают слюну на дискриминирующие объединения
Кто пускает? Кто 'массово'? Сам себе хуйню придумал и других ей доебываешь.
Аноним 24/02/23 Птн 12:17:22 #466 №2621318 
>>2619303
Все эти Net7, NetCore и т.п. крайне отвратно работают с виндой по сравнению с нет фреймворком. Работа с COM-объектами стала в разы медленней, при этом постоянно возникает проблема корявого подсчёта ссылок и массовых утечек памяти, и приходится ещё и всё это руками делать, хуже чем на крестах писать.
Почему майки не смогли сделать сор таким же виндовс-френдли, как фреймворк, для меня загадка.
Если бы не новые фишки языка, не совместимые со старыми рантаймами, ни один разработчик по винду не полез бы в эту новомодную помойку.
Аноним 24/02/23 Птн 12:22:58 #467 №2621322 
image
>>2621317
Слы, бумерок консервированный, ты интернет вообще читаешь? Посмотри популярных блогеров и сишарп-инфлуенсеров. Это самая ожидамая приблуда грядущего дотнета.
Аноним 24/02/23 Птн 13:50:13 #468 №2621389 
>>2621312
одно с другим вообще не связано.
Аноним 24/02/23 Птн 17:28:04 #469 №2621614 
>>2621312

А чем структуры не устраивают? Да и вообще, это хрень какая-то.
Аноним 24/02/23 Птн 17:40:54 #470 №2621623 
>>2621614
и структуры тут тоже не причем.
это расширение синтаксиса, а не новый тип
Аноним 24/02/23 Птн 19:31:53 #471 №2621695 
Дайте ссылку на API стандартной библиотеки или как она там называется в шарпе. Гуглеж не помогает, все что связано с C#/.NET это пиздец как все свалено в кучу.
Аноним 24/02/23 Птн 20:28:58 #472 №2621780 
>>2621695
https://learn.microsoft.com/en-us/dotnet/api/?view=net-7.0
Аноним 24/02/23 Птн 21:35:04 #473 №2621872 
перекат.webm
Если есть предложения к следующему перекату, то кидайте. Может шапку обновить или ещё чего.
Аноним 24/02/23 Птн 21:37:27 #474 №2621877 
>>2621872
1. Перекат будет после 1000 постов.
2. В шапке обязательно должно быть аниме
Аноним 24/02/23 Птн 21:44:50 #475 №2621892 
image.png
image.png
>>2621872
Я, как ОП шапки, готов выслушать предложения и добавить их в свой личный пастбин. Можно добавить перформанс EFCore из .NET 7 vs .NET 6 (если кому не впадлу измерить), например вот такое для LINQ и Reflection есть. Если есть фотошоперы - фотошопьте аниме, иначе никакого переката.
Аноним 24/02/23 Птн 21:46:57 #476 №2621895 
это-я.webm
>>2621877
>1. Перекат будет после 1000 постов.
Но тогда тред утонет! Все нормальные треды перекатываются после 500. А мы чем хуже.

>2. В шапке обязательно должно быть аниме
Это можно будет устроить.

>>2621892
> иначе никакого переката
Так ты и так уже 2 треда не перекатывал, ленивец! Мне пришлось вытаскивать тред из помойки.
Аноним 24/02/23 Птн 21:47:45 #477 №2621897 
.png
А я вот заебался с этими json'ами и решил ini-лайк хуйнуть конфигурацию.
По дефолту - в /etc/appname/appname.conf кладу
Сразу миллиард проблем решил.
Во-первых, намного удобнее монтировать и если надо менять конфигурацию не залазя в контейнер, при этом мы не хотим все кишки наружу(да, это не проблема, но сам подход того что по дефолту майки считают что надо прямо с приложением держать - мне не нравился никогда)
Во-вторых, соблюдаем линуксовские договоренности и уважаем среду
В-третьих, сам json - уебищный формат для пользователя. Вот реально, как я заебался объяснять куда админ должен вписать какую хуйню, чтобы то что ему надо получилось. С ini-лайк форматами и возможностью закоментить-раскоментить - они как-то проще это все понимают

Короче. Ошибкой было использовать json как основной способ конфигурирования в .net core и тянется до сих пор.
Аноним 24/02/23 Птн 21:48:51 #478 №2621898 
image.png
>>2621895
>Так ты и так уже 2 треда не перекатывал, ленивец
Да, есть такое, извиняюсь. Заработался-залиткодился. Можно еще пик добавить в шапку чтобы все ахуели с моих возможностей!
Аноним 24/02/23 Птн 21:48:55 #479 №2621900 
gj.gif
>>2621780
Аноним 24/02/23 Птн 21:50:46 #480 №2621905 
hi-hi-hi.webm
>>2621898
> image.png
Ты ступил на путь безумия.
Аноним 24/02/23 Птн 21:50:50 #481 №2621906 
image.png
Можно вот эту пикчу добавить, вытащил из одного из прошлых моих тредов. Вообще надо бы шапочку обновить, в ссылках нет смысла, всё равно никто не читает
Аноним 24/02/23 Птн 21:52:09 #482 №2621910 
>>2621906
Хз, мне нравится нынешняя заглавная пикча треда. Я бы её сохранил для последующих тредов. Так C# тред сразу узнаётся среди других. А на твоей пикче слишком много деталей, суть теряется.
Аноним 24/02/23 Птн 21:52:20 #483 №2621911 
Вообще если есть фотошоп-кун или видеомейкер-кун то призываем для обновления шапки, можно вебм вставить даже какой-нибудь ахуенного шарпо-кода, такого еще ни у кого не было!
Аноним 24/02/23 Птн 21:53:21 #484 №2621915 
>>2621910
Да, есть такое, мне кажется просто "C#" можно побольше сделать и выделить синим/фиолетовым, а нипонский текст вырезать.
Аноним 24/02/23 Птн 21:54:21 #485 №2621917 
Перекот пока не делаем, надо шапку сделать нормальную
Аноним 24/02/23 Птн 22:02:32 #486 №2621936 
>>2621895
> Все нормальные треды перекатываются после 500. А мы чем хуже.
В том-то и дело, что лучше. Петухон и JS перекатывают после 500, потому что там тысячи вкатунов, и надо, чтобы каждый, кто видит первую страницу /pr/, видел эти треды и пытался вкатиться туда, не создавать шарпобогам конкуренцию. В шарпобоги знают про навигатор, откуда по тегу можно перейти в нужный тред.
Аноним 24/02/23 Птн 22:03:36 #487 №2621940 
image.png
image.png
image.png
Аноним 24/02/23 Птн 22:04:42 #488 №2621943 
>>2621936
С конкуренцией успешно справляются колледжи и вузы. Потому что преподы сидят на шарпах еще со времен фреймворка
Аноним 24/02/23 Птн 22:04:52 #489 №2621944 
>>2621940
Сойдёт.
Аноним 24/02/23 Птн 22:05:56 #490 №2621947 
>>2621943
После колледжей и вузов вкатываются от силы 10% студентов, и то те, кто учился самостоятельно. Остальные наивно надеялись, что в вузе их научат программировать.
Аноним 24/02/23 Птн 22:06:35 #491 №2621951 
Считаю нам нужна вебмка в шапку чтобы выебнуться
Аноним 24/02/23 Птн 22:06:38 #492 №2621952 
muhahaha.webm
ПЕРЕКАТ

>>2621949 (OP)
>>2621949 (OP)
>>2621949 (OP)
Аноним 25/02/23 Суб 16:35:59 #493 №2622558 
>>2621947
А как научиться то? Что нужно делать?
Многоходовочка  Аноним 31/03/23 Птн 22:29:23 #494 №2658829 
image.png
Кароче план таков, пойду на курсы JS и потом уже парарелельно по чучуть буду учить c# в итоге с крежетом стану фулл стак через пару сотен лет


JS так как быстрее выучишься и пойти на работу сразу, ну и потом изучать c# потому что хочу работать в инди компании что разрабатывает игры на unity

какие водводные?
Аноним 01/04/23 Суб 01:55:17 #495 №2658937 
>>2658829
>курсы JS
Не нужно. Твердо и четко.
>игры на unity
Выбери что-то одно Если хочешь веб. то лучше к джаваскрипту выучить что-то серверное, например php.
Если хочешь игры, то учи сразу сисярп.
comments powered by Disqus

Отзывы и предложения