Как получить значение из файла конфигурации appsettings.json в автономной .NET Core DLL? - PullRequest
0 голосов
/ 30 октября 2019

EDIT: Передача конфигурации с контроллера ASP.NET не будет работать, если он запущен в консольном приложении.

Справочная информация:- DLL будет поставляться с различными приложениями, некоторыми приставками, некоторыми ASP.NET MVC и некоторыми WebAPI - Я создаю .NET Core C # DLL обработки, которой нужно несколько записей конфигурации из appsettings.json. - Я хотел бы сделать методы DLL C # все статическими, если это возможно для простоты. - Примером записи конфигурации будет «SxProcFull» со ​​значениями true или false. Для DLL требуется около 10 записей конфигурации- DLL является частью гораздо большей базы кода и вызывается на несколько уровней по сравнению с методом веб-контроллера или основным методом консольного приложения
Как я могу получить запись конфигурации изнутри DLL? Большинство примеров в Интернете относятся к ASP.NET и упрощают их, помещая код записи конфигурации в метод контроллера, а службу конфигурации передают в метод контроллера. Документы .NET Core содержат подробные сведения о типах поставщиков, но не содержат реальных примеров.

Ссылки по теме:

Основные сведения о внедрении зависимости .net Core в консольное приложение https://espressocoder.com/2018/12/03/build-a-console-app-in-net-core-like-a-pro/https://blog.bitscry.com/2017/05/30/appsettings-json-in-net-core-console-app/https://docs.microsoft.com/en-us/aspnet/core/fundamentals/?view=aspnetcore-3.0&tabs=windowsИ многое другое ...

Редактировать: перемещение элемента типа нескольких приложений в начало списка фона.

ОТВЕТ:

using System;
using System.IO;
using System.Reflection;
using Microsoft.Extensions.Configuration;

namespace AspNetCoreTestProject2
{
public static class MyConfiguration
{
    private static IConfigurationRoot GetConfigRoot()
    {
        var assemblyLoc = Assembly.GetExecutingAssembly().Location;
        var directoryPath = Path.GetDirectoryName(assemblyLoc);

        var configFilePath = Path.Combine(directoryPath, "appsettings.json");

        if (File.Exists(configFilePath) == false)
        {
            throw new InvalidOperationException("Config file not found");
        }

        IConfigurationBuilder builder = new ConfigurationBuilder();
        builder.AddJsonFile(configFilePath);

        var configRoot = builder.Build();

        return configRoot;
    }

    public static string ConfigGetConnectionStringByName(string connnectionStringName)
    {
        if (string.IsNullOrWhiteSpace(connnectionStringName))
        {
            throw new ArgumentException(nameof(connnectionStringName));
        }

        var root = GetConfigRoot();
        var ret = root.GetConnectionString(connnectionStringName);

        if (string.IsNullOrWhiteSpace(ret))
        {
            throw new InvalidOperationException("Config value cannot be empty");
        }

        return ret;
    }

    public static string ConfigEntryGet(string configEntryName)
    {
        if (string.IsNullOrWhiteSpace(configEntryName))
        {
            throw new ArgumentException(nameof(configEntryName));
        }

        var root = GetConfigRoot();
        var ret = root[configEntryName];

        if (string.IsNullOrWhiteSpace(ret))
        {
            throw new InvalidOperationException("Config value cannot be empty");
        }

        return ret;
    }
}
}

Ответы [ 3 ]

0 голосов
/ 30 октября 2019
    private readonly IConfiguration _config;

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

    public IActionResult Testing()
    {
      string getKey = _config["Token:Key"]
    }

   If you have this sample json
   "Token": {
   "Key": "ktF2YqrBlhfdg444"
   }
0 голосов
/ 30 октября 2019

Я добавил ответ на основании комментария Мэтта Джи и ссылки в комментарии. Смотрите конец вопроса.

0 голосов
/ 30 октября 2019

Я не знаю, почему вы копируете JSON в папку с Dlls и используете этот JSON. В Visual Studio вы можете выбрать JSON и установить свойство «копировать в выходной путь». Если вы делаете это так, вы можете использовать IConfiguration .

Класс, который вы получаете из метода инициализации в вашем классе контроллера. Например:

public ApiController(IConfiguration configuration)
{
   Configuration = configuration;
}
private IConfiguration Configuration;

На другом приложении C # вы можете использовать это Nuget Так что читайте файл JSON с StreamReader.

StreamReader sw = new StreamReader("myjason.json");
string json = sw.ReadToEnd();

Затем используйте JObject

JObject obj = JObject.Parse(json); 
string mainpath = (string)obj["paths"]["mainpath"];

Надеюсь, это поможет.

BierDav

...