Как объединить несколько массивов из файлов конфигурации ASP.Net Core?C#

Место общения программистов C#
Ответить
Anonymous
 Как объединить несколько массивов из файлов конфигурации ASP.Net Core?

Сообщение Anonymous »

Мне хотелось бы динамически загружать и регистрировать службы в своем приложении. Для этого мне нужно иметь возможность загружать файлы конфигурации из разных проектов в решение и объединять значения из них в один массив json.
К сожалению, по умолчанию в конфигурации ASP.Net Core значения переопределяются.

Я регистрирую файлы с помощью следующего кода (часть файла Program.cs):

Код: Выделить всё

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((webHostBuilderContext, configurationbuilder) =>
{
var env = webHostBuilderContext.HostingEnvironment;
configurationbuilder.SetBasePath(env.ContentRootPath);
configurationbuilder.AddJsonFile("appsettings.json", false, true);

var path = Path.Combine(env.ContentRootPath, "App_Config\\Include");

foreach(var file in Directory.EnumerateFiles(path, "*.json",SearchOption.AllDirectories))
{
configurationbuilder.AddJsonFile(file, false, true);
}
configurationbuilder.AddEnvironmentVariables();
})
.UseStartup();
Код ищет все файлы с расширением *.json внутри каталога App_Config\Include и добавляет их все в построитель конфигурации.

Структура файлов выглядит следующим образом:

Код: Выделить всё

{
"ServicesConfiguration": {
"Services": [
{
"AssemblyName": "ParsingEngine.ServicesConfigurator, ParsingEngine"
}
]
}
}
Как видите, у меня есть основной раздел ServicesConfiguration, затем массив Services с объектами, которые имеют один атрибут AssemblyName.

Как видите, у меня есть основной раздел ServicesConfiguration, затем массив Services с объектами, имеющими один атрибут AssemblyName.

p>

Чтобы прочитать эти значения, я использую класс ServicesConfiguration со списком:

Код: Выделить всё

public class ServicesConfiguration
{
public List Services { get; set; }
}
И в этом списке используется класс ServiceAssembly:

Код: Выделить всё

public class ServiceAssembly
{
public string AssemblyName { get; set; }
}
Чтобы загрузить эту конфигурацию, я использую IOptions на уровне конструктора (DI):

Код: Выделить всё

Microsoft.Extensions.Options.IOptions servicesConfiguration,
Кажется, что конфигурация загружена, но значения из файлов не объединяются, а переопределяются последним найденным файлом.

Есть идеи, как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/539 ... tion-files
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»