Дизайн XML для синтаксического анализа в C#


Я пытаюсь дизайн XML с конфигурацией информацию, так что я могу разобрать его на этот код:

...
services.Configure<IdentityOptions>(options =>
{
    // Password settings
    options.Password.RequireDigit = true;
    options.Password.RequiredLength = 8;
    options.Password.RequireNonAlphanumeric = false;
    options.Password.RequireUppercase = true;
    options.Password.RequireLowercase = false;
    options.Password.RequiredUniqueChars = 6;
});
...

Я уже 4 версии XML-код, но я не знаю, какой выбрать:

<identity>
    <!-- version 1 -->
    <password>
        <RequireDigit>true</RequireDigit>
        <RequiredLength>8</RequiredLength>
        <RequireNonAlphanumeric>false</RequireNonAlphanumeric>
        <RequireUppercase>true</RequireUppercase>
        <RequireLowercase>false</RequireLowercase>
        <RequiredUniqueChars>6</RequiredUniqueChars>
    </password>
    <!-- version 2 -->
    <password   RequireDigit="true" 
                RequiredLength="8" 
                RequireNonAlphanumeric="false" 
                RequireUppercase="true" 
                RequireLowercase="false" 
                RequiredUniqueChars="6"
    />
    <!-- version 3 -->
    <password>
        <RequireDigit value="true"/>
        <RequiredLength value="8"/>
        <RequireNonAlphanumeric value="false"/>
        <RequireUppercase value="true"/>
        <RequireLowercase value="false"/>
        <RequiredUniqueChars value="6"/>
    </password>
    <!-- version 4 -->
    <password>
        <RequireDigit/>
        <RequiredLength value="8"/>
        <RequireUppercase/>
        <RequiredUniqueChars value="6"/>
    </password>
</identity>
  • Существуют ли правила, когда следует выбрать?
  • Или как решить, что является лучшим или наиболее подходящим?


Комментарии
1 ответ

Вы пытаетесь воссоздать функциональность, которая уже предоставляется из коробки.

Ссылка настройки ASP.NET ядро приложения

Из документации он поддерживает поставщиков в ini, JSON и XML.


Каждое значение конфигурации карты в ключевой строке. Есть встроенная поддержка привязки к десериализации параметров в пользовательский объект поко (простой .Чистый класс со свойствами).

Ссылка ASP.NET ядро 1.0 конфигурации глубокое погружение

Для XML, вам нужно добавить этот пакет NuGet: Microsoft.Extensions.Configuration.Xml и формат, который использует провайдер будет выглядеть следующим образом для настройки

Примечание: это соответствует близко к версии 1, в вашем примере

<configuration>
<identityOptions>
<password>
<RequireDigit>true</RequireDigit>
<RequiredLength>8</RequiredLength>
<RequireNonAlphanumeric>false</RequireNonAlphanumeric>
<RequireUppercase>true</RequireUppercase>
<RequireLowercase>false</RequireLowercase>
<RequiredUniqueChars>6</RequiredUniqueChars>
</password>
</identity>
</configuration>

И следующие будут добавлены как часть конфигурации

//...
.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true)
//...

Если с помощью JSON, то

{  
"IdentityOptions": {
"Password": {
"RequireDigit": true
"RequiredLength": 8
"RequireNonAlphanumeric": false
"RequireUppercase": true
"RequireLowercase": false
"RequiredUniqueChars": 6
}
}
}

И следующие будут добавлены как часть конфигурации

//...
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
//...

Вы, кажется, уже быть настройке IOptionsи это хорошо.

//...
// Register the ConfigurationBuilder instance which IdentityOptions binds against.
services.Configure<IdentityOptions>(Configuration);

//...

Это позволит конструктору внедрения зависимостей с IOptions<TOptions> для доступа к настройкам

private readonly IdentityOptions options;

public MyClass(IOptions<IdentityOptions> identity) {
options = identity.Value;
}

7
ответ дан 21 марта 2018 в 12:03 Источник Поделиться