Использование настроек со сложными типами
-
03-07-2019 - |
Вопрос
Я использую класс Settings в своем проекте .NET.В редакторе я заметил, что только определенные типы доступны для использования в качестве типов для отдельных свойств в классе Settings.Что, если бы я хотел иметь свойство, которое было бы, например, перечислением из моего кода или общей коллекцией?Как бы я это реализовал?
Я предполагаю, что могу сделать это в отдельном файле, используя механизм частичного класса (поскольку Настройки уже определены как частичный класс), но я хочу посмотреть, согласен ли кто-нибудь с этим, и есть ли способ сделать это внутри редактор.
Решение
Создайте новый файл «Настройки», чтобы добавить сложный/определяемый пользователем тип выбора.Вот инструкция для Enum.
Шаг 1.Создайте файл настроек
Шаг 2.Найдите тип
Шаг 3.Выберите тип (Пространство имен.Имятипа)
Шаг 4.Та да - Готово
Другие советы
Чтобы пользовательский класс отображался в этом списке, убедитесь, что в качестве одного из параметров его создания указан конструктор по умолчанию.Я усвоил это на собственном горьком опыте
Чтобы ответить на комментарий/вопрос Джеффри о том, возможны ли общие списки в файле настроек, ответ — да.Вам просто нужно отредактировать XML-файл настроек вручную.Например, если у меня есть следующий класс:
public class UrlAlias
{
public string Name { get; set; }
public string BaseUrl { get; set; }
}
Я могу создать их список, щелкнув правой кнопкой мыши файл настроек и выбрав «Открыть с помощью...».
Затем выберите XML/текстовый редактор и установите значение «Тип» на полное имя класса, т.е.:
Type="System.Collections.Generic.List`1[MyProject.SomeNamespace.UrlAlias]"
Полный XML-файл настроек будет выглядеть так:
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="MyProject.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="UrlAliases" Type="System.Collections.Generic.List`1[CommonAddin.Data.DataSource.UrlAlias]" Scope="User">
<Value Profile="(Default)"></Value>
</Setting>
</Settings>
</SettingsFile>
После этого у вас должен быть правильно настроенный список созданных вами объектов пользовательских настроек.
Выполнение этого в отдельном файле как части частичного класса вполне приемлемо.
Если вы хотите иметь возможность заполнять сложные объекты через файлы конфигурации, я бы предложил использовать какой-нибудь Dependency Injection Framework s.a.Весна.Нет.