我已经通过了配置文档 on ASP.NET核心。文档显示,您可以从应用程序中的任何位置访问配置。
下面是由模板创建的Startup.cs
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsEnvironment("Development"))
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// 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.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
}
}所以在Startup.cs中我们配置了所有的设置,Startup.cs也有一个名为Configuration的属性
我无法理解的是,您如何在控制器或应用程序中的任何地方访问此配置?MS建议使用期权模式,但是我只有4-5个键值对,所以我不想使用选项模式。我只想访问应用程序中的配置。我怎么在任何一堂课上注射它?
发布于 2016-08-30 16:43:12
更新
使用ASP.NET Core2.0,自动将在依赖注入容器中添加应用程序的IConfiguration实例。这也与ConfigureAppConfiguration在WebHostBuilder上一起工作。
例如:
public static void Main(string[] args)
{
var host = WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder =>
{
builder.AddIniFile("foo.ini");
})
.UseStartup<Startup>()
.Build();
host.Run();
}它就像将IConfiguration实例添加到服务集合中一样简单,就像ConfigureServices中的单个对象一样
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IConfiguration>(Configuration);
// ...
}其中Configuration是Startup类中的实例。
这允许您在任何控制器或服务中注入IConfiguration:
public class HomeController
{
public HomeController(IConfiguration configuration)
{
// Use IConfiguration instance
}
}发布于 2019-03-27 20:46:19
正确的方法:
在.NET核心中,您可以将IConfiguration作为参数注入您的类构造函数,并且它是可用的。
public class MyClass
{
private IConfiguration configuration;
public MyClass(IConfiguration configuration)
{
ConnectionString = new configuration.GetValue<string>("ConnectionString");
}现在,当您想要创建类的一个实例时,由于您的类被注入了IConfiguration,您将不能只执行new MyClass(),因为它需要在构造函数中注入一个IConfiguration参数,因此,您还需要将类注入到注入链,这意味着两个简单步骤:
1)将类/es-要在其中使用IConfiguration的类/es添加到ConfigureServices()方法的ConfigureServices()方法的Startup.cs中
services.AddTransient<MyClass>();2)定义一个实例--比如说在Controller中,并使用构造函数注入它:
public class MyController : ControllerBase
{
private MyClass _myClass;
public MyController(MyClass myClass)
{
_myClass = myClass;
}现在你应该可以自由地享受你的_myClass.configuration了.
另一个选项:
如果您仍然在寻找一种不需要将类注入控制器就可以使用的方法,则可以将其存储在static class中,您将在Startup.cs中配置它,如下所示:
public static class MyAppData
{
public static IConfiguration Configuration;
}您的Startup构造函数应该如下所示:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
MyAppData.Configuration = configuration;
}然后在程序中的任何地方使用MyAppData.Configuration。
不要问我为什么第一种选择是正确的,我可以看到,经验丰富的开发人员总是避免垃圾数据的沿途,这是众所周知的,这不是最好的做法是在内存中有大量的数据始终可用,这对性能和开发都没有好处,也许只有你需要的东西也更安全。
发布于 2017-10-12 17:12:50
我知道这是旧的,但是考虑到IOptions模式的实现相对简单:
我不知道你为什么不这么做。
https://stackoverflow.com/questions/39231951
复制相似问题