Монодроид: куда я должен поместить параметры конфигурации?


Из Мигель де Икаса:

Мы используем профиль библиотеки, который лучше подходит для мобильных устройств, поэтому мы удалили функции, которые не являются необходимыми (как и вся система.Стек конфигурации, как и Silverlight).
После многих лет разработки .NET я привык хранить параметры конфигурации в файлах web.config и app.config.
  • При использовании Mono для Android, где я должен поместить свои настройки конфигурации?
    • Если это имеет значение, я бы как хранить различные параметры конфигурации для различных конфигураций сборки, а также.
4 7

4 ответа:

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

var prefs = this.GetSharedPreferences("Config File Name", FileCreationMode.Private);
var editor = prefs.Edit();

#if MonoRelease
editor.PutString("MyKey", "My Release Value");
editor.PutString("ReleaseKey", "My Release Value");
#else
editor.PutString("MyKey", "My Debug Value");
editor.PutString("DebugKey", "My Debug Value");
#endif

editor.PutString("CommonKey", "Common Value");
editor.Commit();

У нас была точно такая же проблема в нашем текущем проекте. Моим первым побуждением было поместить конфигурацию в таблицу SQLite key-value, но затем мой внутренний клиент напомнил мне основную причину файла конфигурации - он должен поддерживать простое редактирование.
Поэтому вместо этого мы создали XML-файл и поместили его туда:

string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

И получить к нему доступ, используя следующие свойства:

public string this[string key]
    {
        get
        {
            var document = XDocument.Load(ConfigurationFilePath);
            var values = from n in document.Root.Elements()
                       where n.Name == key
                       select n.Value;
            if(values.Any())
            {
                return values.First();
            }
            return null;
        }
        set
        {
            var document = XDocument.Load(ConfigurationFilePath);
            var values = from n in document.Root.Elements()
                       where n.Name == key
                       select n;
            if(values.Any())
            {
                values.First().Value = value;
            }
            else
            {
                document.Root.Add(new XElement(key, value));
            }
            document.Save(ConfigurationFilePath);
        }
    }
}

Через синглетный класс мы называем конфигурацией так что для разработчиков .NET это очень аналогично использованию приложения.конфигурационный файл. Возможно, это не самое эффективное решение,но оно делает свою работу.

ITNOA

Может быть, PCLAppConfig поможет вам создавать и читать из app.config в Xamarin.Формирует проект PCL или другие проекты Xamarin.

Для различных конфигураций в различных режимах сборки, таких как release и debug, вы можете использоватьпреобразование конфигурации на app.config.

Есть Xamarin centric AppSetting reader: https://www.nuget.org/packages/PCLAppConfig довольно полезно для непрерывной доставки (поэтому сервер развертывания, такой как octopus, позволяет изменять ваш конфигурационный файл для каждой среды со значениями, хранящимися на cd-сервере)

Есть Xamarin centric AppSetting reader, доступный по адресу https://www.nuget.org/packages/PCLAppConfig это довольно полезно для непрерывной доставки;

Используйте как показано ниже:

1) добавьте самородок ссылка на пакет для ваших проектов pcl и платформ.

2) Добавьте приложение.конфигурационный файл в вашем проекте PCL, а затем в виде связанного файла во всех ваших проектах платформы. Для Android, убедитесь в том, чтобы установить действие при построении 'AndroidAsset', для UWP установить действие при построении "содержание". Добавить ключи настроек / значения: <add key="config.text" value="hello from app.settings!" />

3) инициализируйте ConfigurationManager.AppSettings в каждом проекте вашей платформы, сразу после " Xamarin.Формы.Формы.Init ' заявление, это на AppDelegate в iOS, Основная активность.cs в Android, приложение в UWP / Windows 8.1 / WP 8.1:

ConfigurationManager.Initialise(PCLAppConfig.FileSystemStream.PortableStream.Current);

3) прочитайте настройки: ConfigurationManager.AppSettings["config.text"];