Совместное использование файла конфигурации между проектами в ядре asp.net - PullRequest
0 голосов
/ 19 октября 2018

У меня есть решение в asp.net core, и внутри присутствуют несколько проектов API, и это своего рода архитектура микросервисов.Моя структура решения выглядит следующим образом.

ABC.API
DEF.API
GHI.API and so on....

У меня также есть еще один проект библиотеки классов, который имеет некоторые общие функции и может использоваться всеми вышеупомянутыми проектами API.

И я хочусохраните строку подключения внутри проекта библиотеки классов, используя файл json или config, поскольку все вышеперечисленное подключается к одной базе данных, и я не хочу повторять это во всех проектах.

Проблема:

  • Как сохранить файл (json / config) в проекте библиотеки.Если после размещения проекта после публикации проекта будут храниться значения, поскольку он будет генерировать файл DLL.
  • Как получить доступ к строке подключения в проектах API, причина в том, что я инициализирую подключение в проектах API.
  • Я попытался сохранить файл в верхней папке, а затем добавил следующие настройки в Program.cs.

    var sharedFolder = Path.Combine(env.ContentRootPath, "..\\..", "Shared");
    config..AddJsonFile(Path.Combine(sharedFolder, "SharedSettings.json"), optional: false)
    

    Но это не работает, так как после публикации проекта отдельно папкане будет найден.

Кто-нибудь может подсказать мне, как этого добиться, и я на правильном пути?

1 Ответ

0 голосов
/ 22 октября 2018

У меня была такая же проблема

Я решил, выполнив следующее.

  1. Создать библиотеку классов для всех ваших общих зависимостей

  2. Создать папку с именем AppSettings в этой библиотеке классов.Сохраните все свои конфиги json там

  3. Затем я создал статический вспомогательный класс в этой библиотеке классов с именем JsonConfiguration.cs См. Код

     public static class JsonConfiguration
    {
    
    public static IConfiguration ConfigurationContainer { get; private set; }
    
    public static IConfiguration CreateConfigurationContainer()
    {
        var environment = string.Empty;
        try
        {
            environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            _logger.Debug($"Found environment variable : {environment}");
            if (string.IsNullOrWhiteSpace(environment))
            {
                _logger.Debug($"Setting up Production appsettings.");
                //WE ARE IN PROD !!
                return ConfigurationContainer = new ConfigurationBuilder()
                    .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                    .AddJsonFile($"bin/AppSettings/appsettings.json").Build();
            }
    
            _logger.Debug($"Setting up {environment} appsettings.");
            return ConfigurationContainer = new ConfigurationBuilder()
                .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                .AddJsonFile($"bin/AppSettings/appsettings-{environment}.json").Build();
        }
        catch (Exception ex)
        {
            _logger.Fatal(ex, "{message} {environment}", "Failed Setting up Application Config.", environment);
            throw;
        }
    }
    

    }

Убедитесь, что ваши файлы json помечены как «Копировать в выходной каталог», чтобы всегда копировать.

Затем вы можете зарегистрировать IConfiguration в приложении, которое нуждается в этом, и вызвать JsonConfiguration.CreateConfigurationContainer(),Я, вероятно, сопоставил бы ваши строки соединения с конкретным классом модели и внедрил бы, где это необходимоНадеюсь, этого было достаточно, чтобы вы пошли.

...