我已经在我的Startup.cs中添加了对appsettings.json文件的访问权限作为框架服务:
public IConfigurationRoot Configuration { get; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.Configure<AppConfig>(Configuration);
services.AddMvc();
}
所以现在我可以从我的控制器访问配置文件:
public class HomeController : Controller
{
private readonly AppConfig _appConfig;
public HomeController(IOptions<AppConfig> appConfig, ConfigContext configContext)
{
_appConfig = appConfig.Value;
}
}
那是有效的,但是netcoreapps目前在从我的控制器范围外的类访问配置文件方面有什么好处呢?
我的意思是我不想将所需的配置变量始终传递给其他方法,例如:
public IActionResult AnyAction() {
SomeStaticClass.SomeMethod(_appConfig.var1, _appConfig.var2, _appConfig.var3...)
//or always have to pass the _appConfig reference
SomeStaticClass.SomeMethod(_appConfig)
}
在以前版本的.NET Framework中,如果我需要从&#34; SomeStaticClass&#34;访问配置文件。我曾经在任何需要访问web.config的类中使用ConfigurationManager。
在netcoreapp1.1中执行此操作的正确方法是什么?无论是ConfigurationManager还是依赖注入方法都适用于我。
答案 0 :(得分:0)
我认为这个问题更多的是关于如何从静态类中获取上下文变量。我认为这将完成你想要的,但我不确定你为什么要一个静态类或者你想用它做什么(参见XY问题)。
public class HomeController : Controller
{
private readonly AppConfig _appConfig;
public HomeController(IOptions<AppConfig> appConfig, ConfigContext configContext)
{
_appConfig = appConfig.Value;
SomeStaticClass.SomeStaticMember = appConfig.Value
}
public IActionResult AnyAction() {
SomeStaticClass.SomeMethod(); //The get the value you want from within
}
}
编辑: 您可以使用Newtonsoft.Json,它是Microsoft.AspNet.Mvc.ModelBinding的依赖项,它是Microsoft.AspNet.Mvc的依赖项
string fileContents = string.Empty;
using (StreamReader file = File.OpenText(@".\appsettings.json"))
{
fileContents = file.ReadAllLines();
}
configs= JsonConvert.DeserializeObject(fileContents );
答案 1 :(得分:0)
我所做的是创建以下类:
public static class Configuration
{
private static IConfiguration _configuration;
static Configuration()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
_configuration = builder.Build();
}
public static string GetValue(string key)
{
return _configuration.GetValue<string>(key, null);
}
public static string GetValue(string section, string key)
{
return _configuration.GetSection(section).GetValue<string>(key);
}
}
但是它没有使用IshostingEnvironment参数在Startup.cs中使用的环境逻辑。