我想在我的应用程序中动态加载和注册服务。为此,我需要能够从解决方案中的不同项目加载配置文件,并将它们中的值合并到单个 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<Startup>();
Run Code Online (Sandbox Code Playgroud)
该代码*.json在App_Config\Include目录中搜索所有带有扩展名的文件,并将它们全部添加到配置生成器中。
文件的结构如下所示:
{
"ServicesConfiguration": {
"Services": [
{
"AssemblyName": "ParsingEngine.ServicesConfigurator, ParsingEngine"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我得到了主要部分,ServicesConfiguration然后Services用具有一个属性的对象数组AssemblyName。
要读取这些值,我使用ServicesConfiguration带列表的类:
public class ServicesConfiguration
{
public List<ServiceAssembly> …Run Code Online (Sandbox Code Playgroud)