|
|
|
.NET 4.x Настройки приложения04.07.2016, 18:06. Показов 2889. Ответов 55
Метки нет (Все метки)
Есть проект в виде DLL. В нём есть класс с настройками приложения, контролов... Его сериализую и десерализую в XML. Settings не подходят в виду необходимости экспорта-импорта настроек.
Настройки используются во всё приложении в разных случаях. В разных невзаимосвязанных классах. Вопрос: как лучше всего реализовать такую штуку? Т.е. доступ к настройкам полученным из XML файла. Варианты, которые использую: - статичное свойство в основном классе. Десериализуем при инициализации DLL - статичный класс. Десериализуем при инициализации DLL. -.... Может где-то не прав? Может стоит брать значения по мере необходимости и создать отдельный обработчик считывания-записи (сериализации-десериализации) из XML?
0
|
|
| 04.07.2016, 18:06 | |
|
Ответы с готовыми решениями:
55
Языковые настройки приложения Куда сохраняются настройки приложения |
|
Master of Orion
|
|
| 04.07.2016, 18:34 | |
|
skilllab, в свое время тоже думал, че это не завезли app.config для dll-ок, было бы так удобно!
Но потом пришел к выводу, что это не так (ну и не только я пришел, умные люди объяснили). Вот есть у вас одна DLL-ка, скажем JSON.Net - один человек хочет использовать сериализацию в формате день-месяц-год, а другой: месяц/день/год. Как им быть, Dll-ка то одна? А очень просто - вызвать сериализацию с разными параметрами, которые у каждого приложения свои. Вывод: нужно предоставить программные АПИ конфигурирования вашей DLL, а конфигурационный файл это не ваша забота, а забота потребителей этого проекта. Может они не в XML, а в JSON хотят сериализовывать, или вообще захардкодить, зачем вы их ограничиваете
3
|
|
|
|
||
| 04.07.2016, 18:37 [ТС] | ||
я сам даю пользователям только окошечко с настройками. Никаких их "отсебятин".Вопрос лишь в том, чтобы стучаться к настройкам из любого места кода (округление там задать для текстбокса...цвет тултипа... ). Ну а сериализация - чтоб типа проще туда сюда по машинам гонять.
0
|
||
|
Master of Orion
|
|||||||
| 04.07.2016, 19:04 | |||||||
|
skilllab, у DLL нет никаких окошек, это просто набор методов, условно
![]() Если конечно это не UI-компонент, но там нужно взаимодействовать с чужими просмотрщиками (например студийным), а не изобретать свой. Настройка из любого места - ну если приложению нужно, пусть при запуске загружает в синглтон - библиотека по возможности не должна зависить от приложения, она должа быть стейтлесс.
0
|
|||||||
|
|
||||
| 04.07.2016, 19:22 [ТС] | ||||
![]() Добавлено через 44 секунды
0
|
||||
|
Master of Orion
|
|
| 04.07.2016, 19:47 | |
|
skilllab, синглтон будет для приложения, а не для DLL.
Ну и у статического класса есть большие проблемы - он не может реализовывать интерфейс. Вы же надеюсь не отдаете вместо интерфейсов клиенту объекты?
0
|
|
|
|
||||||||
| 04.07.2016, 19:56 [ТС] | ||||||||
![]() Добавлено через 6 минут app.config это экземпляр класса. Это я назвал в первом сообщении первым в списке.Типа:
0
|
||||||||
|
Master of Orion
|
||
| 04.07.2016, 20:01 | ||
|
skilllab, вам нужно просто конструктор с параметром настроек вызвать же
Зачем статику вовлекать?
0
|
||
|
Master of Orion
|
||
| 04.07.2016, 20:05 | ||
|
1. сделать интефрейс IMyCoolSettings. 2. в этом интерфейсе определить все нужные свойства (например RoundQuantity) 3. в конструкторе сделать параметр типа IMyCoolSettings и инициализировать библиотеку в зависимости от него. 4. в вызывающей сборке (возможно это ваша же будет) сделать наследника от IMyCoolSettings и передавать в конструктор.
0
|
||
|
|
|||||||||||
| 04.07.2016, 20:27 [ТС] | |||||||||||
Добавлено через 3 минуты ![]() IMyCoolSettings в параметрах их конструкторов?Настройки используются во всём приложении в разных случаяхДобавлено через 4 минуты Если вдруг какому то замшелому методу, который зарыт где-то глубоко в логике, вдруг понадобится узнать этот RoundQuantity, то мне аж на весь этот класс с методом передавать ссылку на MyCoolSettings? А вдруг многопоточность? ![]() и в то время когда я буду закрывать свою панельку с сохранением настроек где то код будет допиливать метод с инстансом и RoundQuantity... Добавлено через 2 минуты )Добавлено через 11 минут
0
|
|||||||||||
|
Master of Orion
|
|||
| 04.07.2016, 21:19 | |||
![]() Если лень прокидывать самому, используют IOC-контейнеры, это все то же самое, только компилятор сам сгенерирует необходимые "пробросы". Если вам придется все это добро дебажить в поисках ошибки, то зависимость от глобального состояния вам подложит большую свинью, ибо отладить приложения не зная этого состояния вы не сможете. Добавлено через 1 минуту Но конечно можете оставить все как есть. Разработчики вообще ленивые люди - и это хорошо. Главное, чтобы лень в текущий момент не стоила времени в будущем.
0
|
|||
|
|
|||
| 04.07.2016, 22:02 [ТС] | |||
|
0
|
|||
|
Master of Orion
|
||
| 04.07.2016, 22:48 | ||
|
0
|
||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
|
| 05.07.2016, 08:53 | |
|
skilllab, можно, как вариант, скомбинировать предложенный мисье Psilon-ом метод с минимальными правками кода (без использования DI и прочего). Предусмотреть в твоей библиотеке некий менеджер настроек видимый внешнему коду, который можно сконфигурировать из приложения с помощью того же
IMyCoolSettings. А весь остальной код библиотеки будет брать настройки из этого менеджера (будет он синглтоном или статическим классом (фу-фу-фу) или ещё как-то раздавать настройки - приложению уже будет всё равно - это останется на совести самой библиотеки). Можно будет и библиотеку настраивать гибким образом (без app.config или другого внешнего файла) и все классы твоей библиотеки в ручную снабжать зависимостями не понадобится. Но такое решение элегантным назват рука не поднимется Просто компромис между "правильно" и "быстро".Добавлено через 6 минут Ну и, конечно, остаётся вариант доступа классов из библиотеки к настройкам в app.config самого приложения через класс System.Configuration.ConfigurationManage r.
0
|
|
|
|
||
| 05.07.2016, 09:09 [ТС] | ||
Да я бы и не против, если бы знать толковый метод экспорта/импорта этого app.config с последующим обновлением настроек приложения. Я даже согласен на не динамическое обновление, с перезапуском. Но только не ручками пользователя заменять файл в AppData, как только туда полезут - беда.
0
|
||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
||
| 05.07.2016, 09:14 | ||
|
skilllab, православно-каноническим методом хранения настроек для DLL-ки является получение их (настроек) от приложения прямо в коде. Как само приложение будет их хранить - уже дело десятое.
0
|
||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
|
| 05.07.2016, 09:38 | |
|
skilllab, если настройки нужно задавать в рантайме, то тут только конфигурирование библиотеки через код (приём с IMyCoolSettings).
0
|
|
| 05.07.2016, 09:38 | |
|
Помогаю со студенческими работами здесь
20
Как и где хранить настройки приложения
Читать настройки приложения из файла конфигурации Сохраняем настройки приложения средствами Visual Studio Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
|
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
На примере нетипового документа разработанного в конфигурации КА2.
В качестве источника данных указан регистр накопления, в который записываются данные о. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|