如何在 Asp.Net MVC 6 中检索 AppSettings 配置?
How can I retrieve AppSettings configuration back in Asp.Net MVC 6?
假设我正在使用新的 DepencyInjection 框架在新的 ASP.Net/vNext.
中配置我的 类 和依赖项
如何使用,如何获取我的预定义配置设置?
public void ConfigureServices(IServiceCollection services)
{
// Add Application settings to the services container.
services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings"));
// Add EF services to the services container.
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
// Add Identity services to the services container.
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Configure the options for the authentication middleware.
// You can add options for Google, Twitter and other middleware as shown below.
// For more information see http://go.microsoft.com/fwlink/?LinkID=532715
services.Configure<FacebookAuthenticationOptions>(options =>
{
options.AppId = Configuration["Authentication:Facebook:AppId"];
options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
});
services.Configure<MicrosoftAccountAuthenticationOptions>(options =>
{
options.ClientId = Configuration["Authentication:MicrosoftAccount:ClientId"];
options.ClientSecret = Configuration["Authentication:MicrosoftAccount:ClientSecret"];
});
// Add MVC services to the services container.
services.AddMvc();
services.AddSingleton(a =>
{
//AppSettings settingsModel = ?? //GET CONFIGURATION SETTINGS FILLED
// TECHNICAL ARTIFICE TO RETRIEVE CURRENT SETTINGS
//var settingsModel = new AppSettings();
//var config = Configuration.GetSubKey("AppSettings");
//foreach (var item in typeof(AppSettings).GetProperties().Where(b => b.CanWrite))
{
//item.SetValue(settingsModel, config.Get(item.Name));
}
return new FooService(settingsModel);
});
//Uncomment the following line to add Web API services which makes it easier to port Web API 2 controllers.
//You will also need to add the Microsoft.AspNet.Mvc.WebApiCompatShim package to the 'dependencies' section of project.json.
services.AddWebApiConventions();
}
您可以通过在 FooService 的构造函数中注入 IOptions<AppSettings>
DI 服务来获取 AppSettings。
IOptions<>
接口是选项模型的一部分,用于在您的应用程序中访问 POCO 样式设置(例如:您的 AppSettings)。
上面示例中的 services.Configure<AppSettings>(
和 services.Configure<FacebookAuthenticationOptions>(options =>
之类的调用实际上注册了 DI 服务,在解析 IOptions<>
.[= 的请求时,这些服务又被称为 OptionsManager
的 DI 服务使用。 17=]
示例:
public class FooService
{
private readonly AppSettings _settings;
public FooService(IOptions<AppSettings> options)
{
_settings = options.Options;
}
....
....
}
假设我正在使用新的 DepencyInjection 框架在新的 ASP.Net/vNext.
中配置我的 类 和依赖项如何使用,如何获取我的预定义配置设置?
public void ConfigureServices(IServiceCollection services)
{
// Add Application settings to the services container.
services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings"));
// Add EF services to the services container.
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
// Add Identity services to the services container.
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Configure the options for the authentication middleware.
// You can add options for Google, Twitter and other middleware as shown below.
// For more information see http://go.microsoft.com/fwlink/?LinkID=532715
services.Configure<FacebookAuthenticationOptions>(options =>
{
options.AppId = Configuration["Authentication:Facebook:AppId"];
options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
});
services.Configure<MicrosoftAccountAuthenticationOptions>(options =>
{
options.ClientId = Configuration["Authentication:MicrosoftAccount:ClientId"];
options.ClientSecret = Configuration["Authentication:MicrosoftAccount:ClientSecret"];
});
// Add MVC services to the services container.
services.AddMvc();
services.AddSingleton(a =>
{
//AppSettings settingsModel = ?? //GET CONFIGURATION SETTINGS FILLED
// TECHNICAL ARTIFICE TO RETRIEVE CURRENT SETTINGS
//var settingsModel = new AppSettings();
//var config = Configuration.GetSubKey("AppSettings");
//foreach (var item in typeof(AppSettings).GetProperties().Where(b => b.CanWrite))
{
//item.SetValue(settingsModel, config.Get(item.Name));
}
return new FooService(settingsModel);
});
//Uncomment the following line to add Web API services which makes it easier to port Web API 2 controllers.
//You will also need to add the Microsoft.AspNet.Mvc.WebApiCompatShim package to the 'dependencies' section of project.json.
services.AddWebApiConventions();
}
您可以通过在 FooService 的构造函数中注入 IOptions<AppSettings>
DI 服务来获取 AppSettings。
IOptions<>
接口是选项模型的一部分,用于在您的应用程序中访问 POCO 样式设置(例如:您的 AppSettings)。
上面示例中的 services.Configure<AppSettings>(
和 services.Configure<FacebookAuthenticationOptions>(options =>
之类的调用实际上注册了 DI 服务,在解析 IOptions<>
.[= 的请求时,这些服务又被称为 OptionsManager
的 DI 服务使用。 17=]
示例:
public class FooService
{
private readonly AppSettings _settings;
public FooService(IOptions<AppSettings> options)
{
_settings = options.Options;
}
....
....
}