如何在startup.cs的Configure方法中使用ConfigurationBinder

时间:2015-07-21 14:29:27

标签: c# asp.net asp.net-core asp.net-core-mvc

asp.net mvc 6 beta5

我尝试使用config.json来激活\ disactive logging

public IConfiguration Configuration { get; set; }

public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
         {
            var configurationBuilder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
            .AddJsonFile("config.json")
            .AddEnvironmentVariables();
            Configuration = configurationBuilder.Build();

            DBContext.ConnectionString = Configuration.Get("Data:DefaultConnection:ConnectionString");
        }

public void ConfigureServices(IServiceCollection services)
        {
            services.AddOptions();
            services.Configure<AppSettings>(Configuration.GetConfigurationSection("AppSettings"));
        }

// Configure is called after ConfigureServices is called.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory)
        {
            // that line cause NullReferenceException  
            AppSettings settings = ConfigurationBinder.Bind<AppSettings>(Configuration);  
             if (settings.Log.IsActive)
             {
              ................
        }

来自ASP.NET 5 (vNext) - Getting a Configuration Settinghttp://perezgb.com/2015/07/04/aspnet-5-typed-settings-with-the-configurationbinder/的示例
是否有另一种方法可以在“configure”方法中获取AppSettings的实例?我需要输入对象。

2 个答案:

答案 0 :(得分:5)

你可以使用服务定位器得到它:

IOptions<AppSettings> settings = app.ApplicationServices.GetService<IOptions<AppSettings>>();
if (settings.Options.whatever)
  {
     ...
  }

我注意到如果您使用VS 2015的最终版本创建一个新项目,项目模板不包含AppSettings,就像之前的项目模板一样,不确定原因。

答案 1 :(得分:4)

ConfigureServices中配置的每个服务都可以由运行时注入Configure方法:

public void Configure(IApplicationBuilder app, IOptions<AppSettings> options)
{
    // access options.Options here
}

这比直接访问ServiceProvider更简洁。

相关问题