fdnmdConfig 1.0.0

The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package fdnmdConfig --version 1.0.0
                    
NuGet\Install-Package fdnmdConfig -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="fdnmdConfig" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="fdnmdConfig" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="fdnmdConfig" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add fdnmdConfig --version 1.0.0
                    
#r "nuget: fdnmdConfig, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=fdnmdConfig&version=1.0.0
                    
Install fdnmdConfig as a Cake Addin
#tool nuget:?package=fdnmdConfig&version=1.0.0
                    
Install fdnmdConfig as a Cake Tool

Установка

Через nuget: install-package fdnmdConfig

Описание

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

Применение

  1. Создание класса конфигурации
  2. Создание класса для чтения конфигурации
  3. Создание класса для преобразования конфигурации
  4. Инициализация, настройки чтения конфигурации и непосредственное использование

Описание класса конфигурации

Создается класс, содержащий требуемые параметры конфигурации.

Самый простой пример:

public class MyConfig {
    public int MyParam1 {get; set;}
	public string MyParam2 {get; set;}
}

Описание класса чтения конфигурации

Класс чтения конфигурации должен наследовать от класса ConfigReader, который требует реализации метода Read(). Метод Read() обеспечивает чтение конфигурации (из файла, БД и т.д.) и возвращает прочитанный объект, который может не являться классом конфигурации. Метод GetCurrentState() отвечает за определение текущего состояние конфигурации для определения необходимости чтения. Если состояние во время предыдущего чтения совпадает с текущим состоянием, то чтение произведено не будет. По умолчанию метод GetCurrentState() реализован таким образом, что его результат ВСЕГДА приводит к обновлению конфигурации. Если требуется реализовать проверку на необходимость обновления, то метод GetCurrentState() можно переопределить.

Также класс чтения конфигурации ОБЯЗАН иметь конструктор без параметров.

Описание класса преобразования конфигурации

Класс преобразования конфигурации должен наследовать от класса ConfigConverter<T>, который требует реализации метода Convert(object input). Параметр T описывает класс конфигурации, в который происходит преобразование.

Если класс, отвечающий за чтение конфигурации, уже возвращает необходимый класс конфигурации, то метод Convert(object input) можно определить следующим образом:

public override MyConfig Convert(object input){
    return input as MyConfig;
}

Либо можно использовать класс преобразования по умолчанию (без преобразования): WithoutConfigConverter<T>.

Как и класс чтения, класс преобразования конфигурации ОБЯЗАН иметь конструктор без параметров.

Инициализация, настройки чтения конфигурации и непосредственное использование

Решение "в лоб"

Для работы с конфигурацией необходимо задать объект, который будет хранить конфигурацию.

Например:

//с преобразованием
Config<MyConfigReader, MyConfigConverter<MyConfig>, MyConfig> myConfig = new Config<MyConfigReader, MyConfigConverter<MyConfig>, MyConfig>();
//без преобразования
Config<MyConfigReader, WithoutConfigConverter<MyConfig>, MyConfig> myConfig = new Config<MyConfigReader, WithoutConfigConverter<MyConfig>, MyConfig>();

В этом случае, работа с конфигом производится следующим образом:

var x = myConfig.GET.MyParam1;

Как видно, данное применение очевидно, но весьма неудобно как в объявлении, так и в использовании.

Упрощение объявления для использования нескольких коллекций

Класс Config<R, C, T> наследует от базового класса Config, что позволяет добавлять различные конфигурации в общую коллекцию.

Например:

Config[] configs = new Config[] {
    new Config<MyConfigReader1, MyConfigConverter1<MyConfig1>, MyConfig1>(),
	new Config<MyConfigReader2, MyConfigConverter2<MyConfig2>, MyConfig2>()
};

Однако такой способ реализации не позволяет нам напрямую получить конфигурацию требуеого типа, так как базовый класс не знает типов конфигураций. Для получения конфигурации в данной реализации используется метод GetConfig(), после чего необходимо выполнить приведение типов. Также для приведения коллекции к требуемому типу можно использовать метод As<T>(), который сам выполнит указанное приведение.

Пример использования:

object o = configs[0].GetConfig();
var x1 = (o as MyConfig1).MyParam1;

var x2 = configs[1].As<MyConfig2>().MyParam2;

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

Хранение конфигурации напрямую в объекте конфигурации

В классе Config<R, C, T> описано скрытое приведение к типу конфигурации T.

Таким образом, следующий пример будет рабочим:

MyConfig myConfig = new Config<MyConfigReader, MyConfigConverter<MyConfig>, MyConfig>();

Использование в этом случае сильно упрощается:

var x = myConfig.MyParam1;
Обновление конфигурации из источника

Обновление производится методом Reload(). Для включения автоматического обновления необходимо указать AutoUpdate = true;. В случае реализации последним способом вызовы метода Reload() и свойства AutoUpdate недоступны.

Поэтому при создании конфигурации этим способом функцию автообновления можно задать через конструктор:

MyConfig myConfig = new Config<MyConfigReader, MyConfigConverter, MyConfig>(true);
Product Compatible and additional computed target framework versions.
.NET Framework net40 is compatible.  net403 was computed.  net45 is compatible.  net451 was computed.  net452 was computed.  net46 is compatible.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated

Первая версия библиотеки.
Реализован механизм конфигураций.
Отсутствует настройка периода перезагрузки конфигурации.
Отстутствует возможность записи измененной в программе конфигурации.