我有一个.NET Core控制台应用程序,它可以像这样加载我的配置文件:
var configBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
Configuration = configBuilder.Build();
我所见过的大多数示例都只是停在那里,所以我假设它们随后将Configuration传递给整个应用程序吗? (或向IOC注入)
过去,我只是从任何地方的任何类中执行ConfigurationManager.AppSettings [“ key”],但我想使用新的appsettings.json方法。现在不建议对配置进行简单的“全局”访问吗?
我认为IOC不适合我的情况,因为我的Main()方法立即使用'new'创建了许多类实例。
答案 0 :(得分:2)
可接受的做法是将配置作为IConfiguration
注入到您的服务中。
如果您不介意用脚踩死自己,可以手动创建一个全局静态类,并在开始时初始化已构建的配置,并在各处使用它,但是请注意,这基本上是OOP的异端视角。
请注意:如果您的Main
方法使用new
创建了很多东西,也许不应该吗?您可以使用IoC容器并调用container.Resolve<IService>()
而不是new Service(/*...*/)
。如果您考虑了一些重构,则可以正确设置DI(如果您打算对事物进行单元测试,那么这是值得的(注意:您应该对事物进行单元测试)。)
答案 1 :(得分:0)
这将对您有所帮助。它为我工作。
public static string GetConnectionString(string connectionStringName)
{
string basePath = "";
try
{
var env = PlatformServices.Default.Application;
basePath = Directory.GetCurrentDirectory();
var builder = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables();
Configuration = builder.Build();
return Configuration.GetConnectionString(connectionStringName);
}
catch (Exception ex)
{
}
}
答案 2 :(得分:0)
这将对您有所帮助
public static string GetConnectionString(string connectionStringName)
{
string basePath = "";
try
{
var env = PlatformServices.Default.Application;
basePath = Directory.GetCurrentDirectory();
var builder = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables();
Configuration = builder.Build();
return Configuration.GetConnectionString(connectionStringName);
}
catch (Exception ex)
{
}
}