使用执行模式注入配置文件(IoC)

时间:2018-05-03 10:59:04

标签: c# asp.net-core inversion-of-control autofac

我在ASP.NET Core项目中有appsettings.json(以及appsettings.development.json)。我想根据执行模式(生产,开发......)注入配置文件,就像Core一样,但是我希望在不同项目中使用的IoC

使用Core的DI,我有:

config.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: false)
.AddJsonFile($"appsettings.{environmentName}.json", true, true)
.AddEnvironmentVariables();

我在每个控制器中注入IConfiguration。

好的,使用Autofac我尝试在另一个项目(IoC容器所在的位置)中添加文件链接到JSON并测试下一个代码:

configurationBuilder.AddJsonFile("appsettings.json");

//configurationBuilder.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: false)
//.AddJsonFile($"appsettings.{environmentName}.json", true, true)
//.AddEnvironmentVariables();

var module = new ConfigurationModule(configurationBuilder.Build());
builder.RegisterModule(module);

this.container.Resolve<IConfiguration>();

但我得到了下一个错误:

  

配置文件&#39; appsettings.json&#39;找不到,也不是可选的。物理路径是&#39; C:\ Jhon \ source \ Workspaces \ Project \ Development \ Application \ Api \ Api \ bin \ Debug \ netcoreapp2.0 \ appsettings.json&#39;。

1 个答案:

答案 0 :(得分:0)

我认为您的代码在依赖根配置期间搜索Names <- get_query(paste0("con %>% tbl('libraries') %>% filter(libraryid %in% c(", libraries_comma_separated, ")) %>% select(name) %>% collect()")) 文件的位置时会遇到麻烦。

正如我所见,最简单的解决方案是将文件的appsettings.json设置切换为Copy to Output directory

但我还有一些事情要讲。

第一个。如果您使用的是ASP.NET Core 2.x,则无需编写

Copy Always

因为config.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: false) .AddJsonFile($"appsettings.{environmentName}.json", true, true) .AddEnvironmentVariables(); 可以为您的

做所有事情
BuildWebHost

第二个 我认为使用原始public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .Build(); 并不是一个好主意。我宁愿选择options模式。它有助于我们划分逻辑和代码,从IConfiguration中提取设置。