Считайте константы из appsettings.json в библиотеке базовых классов .Net - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужно получить значения из файла appsettings.json в библиотеке классов .Net Core (2.0).Существует множество решений для ASP.Net, но не для .Net Core.Мой appsettings.json, как показано ниже;

{
   {

    "serviceAccountEmail": "******@dotnet****.iam.gserviceaccount.com",
    "Certificate": "*********.p12",
    "secret": "*********",
    "ImpersonatedUser": "*********@*********.com",
    "GoogleApplicationName": "********"
    }
}

1 Ответ

0 голосов
/ 04 февраля 2019

Вам необходимо настроить это в вашей Startup конфигурации

public class Startup
{
    private readonly IConfiguration _config;

    public Startup(IConfiguration config)
    {
        _config = config;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        var value = _config["key"];
    }

    public void Configure(IApplicationBuilder app, IConfiguration config)
    {
        var value = config["key"];
    }
}

MS Docs: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#access-configuration-during-startup

Разделение проблем

Если вы разделяете свое решение на несколько проектов с использованием библиотек классов, пакет Microsoft.Extensions.Options.ConfigurationExtensions пригодится для чтения значений из файлов appsettings и внедрения их в классы конфигурации в проектах..

У него есть 2 расширения, которые вы можете использовать:

public static T Get<T>(this IConfiguration configuration);
public static IServiceCollection Configure<TOptions>(this IServiceCollection services, 
    IConfiguration config) where TOptions : class;

Пример:

Все службы, связанные с безопасностью, я использую Microsoft.AspNetCore.Identity в своем собственном проекте под названием DL.SO.Services.Security,

Настройки безопасности в appsettings.json

Я определяю конфигурации, называемые "AppIdentitySettings", для опций идентификации, которые я хочу настроить в ASP.NET Core Identity framework в моем веб-каталоге /начальный проект.

{
    "ConnectionStrings": {
        ...
    },
    "AppIdentitySettings": {
        "User": {
            "RequireUniqueEmail": true
        },
        "Password": {
            "RequiredLength": 6,
            "RequireLowercase": true,
            "RequireUppercase": true,
            "RequireDigit": true,
            "RequireNonAlphanumeric": true
        },
        "Lockout": {
            "AllowedForNewUsers": true,
            "DefaultLockoutTimeSpanInMins": 30,
            "MaxFailedAccessAttempts": 5
        }
    },
    "Recaptcha": {
        ...
    },
    ...
}

Классы конфигурации

Затем необходимо определить классы конфигурации, которые являются просто POCO, для представления вашей структуры конфигурации в appsettings.json,Имя класса конфигурации не обязательно должно совпадать с именем раздела, который вы определили в appsettings.json, а имена свойств должны совпадать.

namespace DL.SO.Services.Security
{
    public class AppIdentitySettings
    {
        public UserSettings User { get; set; }
        public PasswordSettings Password { get; set; }
        public LockoutSettings Lockout { get; set; }
    }

    public class UserSettings
    {
        public bool RequireUniqueEmail { get; set; }
    }

    public class PasswordSettings
    {
        public int RequiredLength { get; set; }
        public bool RequireLowercase { get; set; }
        public bool RequireUppercase { get; set; }
        public bool RequireDigit { get; set; }
        public bool RequireNonAlphanumeric { get; set; }
    }

    public class LockoutSettings
    {
        public bool AllowedForNewUsers { get; set; }
        public int DefaultLockoutTimeSpanInMins { get; set; }
        public int MaxFailedAccessAttempts { get; set; }
    }
}

Выше и более подробно: https://stackoverflow.com/a/46940811/2343826

...