Chương trình và lớp Khởi nghiệp
Lõi .NET 2.x
Bạn không cần phải mới IConfiguration
trong hàm Startup
tạo. Việc thực hiện của nó sẽ được tiêm bởi hệ thống DI.
// Program.cs
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
// Startup.cs
public class Startup
{
public IHostingEnvironment HostingEnvironment { get; private set; }
public IConfiguration Configuration { get; private set; }
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
this.HostingEnvironment = env;
this.Configuration = configuration;
}
}
Lõi .NET 1.x
Bạn cần nói Startup
để tải các tập tin cài đặt ứng dụng.
// Program.cs
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
host.Run();
}
}
//Startup.cs
public class Startup
{
public IConfigurationRoot Configuration { get; private set; }
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();
this.Configuration = builder.Build();
}
...
}
Nhận giá trị
Có nhiều cách bạn có thể nhận giá trị bạn định cấu hình từ cài đặt ứng dụng:
- Cách sử dụng đơn giản
ConfigurationBuilder.GetValue<T>
- Sử dụng mẫu tùy chọn
Hãy nói rằng bạn appsettings.json
trông như thế này:
{
"ConnectionStrings": {
...
},
"AppIdentitySettings": {
"User": {
"RequireUniqueEmail": true
},
"Password": {
"RequiredLength": 6,
"RequireLowercase": true,
"RequireUppercase": true,
"RequireDigit": true,
"RequireNonAlphanumeric": true
},
"Lockout": {
"AllowedForNewUsers": true,
"DefaultLockoutTimeSpanInMins": 30,
"MaxFailedAccessAttempts": 5
}
},
"Recaptcha": {
...
},
...
}
Cách đơn giản
Bạn có thể đưa toàn bộ cấu hình vào hàm tạo của trình điều khiển / lớp (thông qua IConfiguration
) và nhận giá trị bạn muốn với một khóa được chỉ định:
public class AccountController : Controller
{
private readonly IConfiguration _config;
public AccountController(IConfiguration config)
{
_config = config;
}
[AllowAnonymous]
public IActionResult ResetPassword(int userId, string code)
{
var vm = new ResetPasswordViewModel
{
PasswordRequiredLength = _config.GetValue<int>(
"AppIdentitySettings:Password:RequiredLength"),
RequireUppercase = _config.GetValue<bool>(
"AppIdentitySettings:Password:RequireUppercase")
};
return View(vm);
}
}
Tùy chọn mẫu
Công ConfigurationBuilder.GetValue<T>
việc tuyệt vời nếu bạn chỉ cần một hoặc hai giá trị từ cài đặt ứng dụng. Nhưng nếu bạn muốn nhận nhiều giá trị từ cài đặt ứng dụng hoặc bạn không muốn mã hóa các chuỗi khóa đó ở nhiều nơi, có thể sử dụng Mẫu tùy chọn sẽ dễ dàng hơn . Mẫu tùy chọn sử dụng các lớp để biểu diễn cấu trúc / cấu trúc.
Để sử dụng mẫu tùy chọn:
- Xác định các lớp để biểu diễn cấu trúc
- Đăng ký cá thể cấu hình mà các lớp đó liên kết với
- Tiêm
IOptions<T>
vào hàm tạo của trình điều khiển / lớp mà bạn muốn nhận các giá trị trên
1. Xác định các lớp cấu hình để biểu diễn cấu trúc
Bạn có thể định nghĩa các lớp với các thuộc tính cần khớp chính xác các khóa trong cài đặt ứng dụng của bạn. Tên của lớp không phải khớp với tên của phần trong cài đặt ứng dụng:
public class AppIdentitySettings
{
public UserSettings User { get; set; }
public PasswordSettings Password { get; set; }
public LockoutSettings Lockout { get; set; }
}
public class UserSettings
{
public bool RequireUniqueEmail { get; set; }
}
public class PasswordSettings
{
public int RequiredLength { get; set; }
public bool RequireLowercase { get; set; }
public bool RequireUppercase { get; set; }
public bool RequireDigit { get; set; }
public bool RequireNonAlphanumeric { get; set; }
}
public class LockoutSettings
{
public bool AllowedForNewUsers { get; set; }
public int DefaultLockoutTimeSpanInMins { get; set; }
public int MaxFailedAccessAttempts { get; set; }
}
2. Đăng ký cá thể cấu hình
Và sau đó bạn cần phải đăng ký cá thể cấu hình này ConfigureServices()
trong phần khởi động:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
...
namespace DL.SO.UI.Web
{
public class Startup
{
...
public void ConfigureServices(IServiceCollection services)
{
...
var identitySettingsSection =
_configuration.GetSection("AppIdentitySettings");
services.Configure<AppIdentitySettings>(identitySettingsSection);
...
}
...
}
}
3. Tiêm IOptions
Cuối cùng, trên trình điều khiển / lớp bạn muốn nhận các giá trị, bạn cần tiêm IOptions<AppIdentitySettings>
qua hàm tạo:
public class AccountController : Controller
{
private readonly AppIdentitySettings _appIdentitySettings;
public AccountController(IOptions<AppIdentitySettings> appIdentitySettingsAccessor)
{
_appIdentitySettings = appIdentitySettingsAccessor.Value;
}
[AllowAnonymous]
public IActionResult ResetPassword(int userId, string code)
{
var vm = new ResetPasswordViewModel
{
PasswordRequiredLength = _appIdentitySettings.Password.RequiredLength,
RequireUppercase = _appIdentitySettings.Password.RequireUppercase
};
return View(vm);
}
}