Kelas Program dan Startup
.NET Core 2.x
Anda tidak perlu baru IConfiguration
di Startup
konstruktor. Implementasinya akan disuntikkan oleh sistem 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;
}
}
.NET Core 1.x
Anda perlu memberitahu Startup
untuk memuat file pengaturan aplikasi.
// 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();
}
...
}
Mendapatkan Nilai
Ada banyak cara Anda bisa mendapatkan nilai yang Anda konfigurasi dari pengaturan aplikasi:
- Cara sederhana menggunakan
ConfigurationBuilder.GetValue<T>
- Menggunakan Pola Opsi
Katakanlah appsettings.json
penampilan Anda seperti ini:
{
"ConnectionStrings": {
...
},
"AppIdentitySettings": {
"User": {
"RequireUniqueEmail": true
},
"Password": {
"RequiredLength": 6,
"RequireLowercase": true,
"RequireUppercase": true,
"RequireDigit": true,
"RequireNonAlphanumeric": true
},
"Lockout": {
"AllowedForNewUsers": true,
"DefaultLockoutTimeSpanInMins": 30,
"MaxFailedAccessAttempts": 5
}
},
"Recaptcha": {
...
},
...
}
Cara Sederhana
Anda dapat menyuntikkan seluruh konfigurasi ke konstruktor controller / class Anda (via IConfiguration
) dan mendapatkan nilai yang Anda inginkan dengan kunci yang ditentukan:
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);
}
}
Pola Opsi
Ini ConfigurationBuilder.GetValue<T>
berfungsi baik jika Anda hanya membutuhkan satu atau dua nilai dari pengaturan aplikasi. Tetapi jika Anda ingin mendapatkan beberapa nilai dari pengaturan aplikasi, atau Anda tidak ingin membuat kode string yang sulit di beberapa tempat, mungkin lebih mudah untuk menggunakan Pola Opsi . Pola opsi menggunakan kelas untuk mewakili hierarki / struktur.
Untuk menggunakan pola opsi:
- Tentukan kelas untuk mewakili struktur
- Daftarkan instance konfigurasi yang diikat oleh kelas-kelas tersebut
- Menyuntikkan
IOptions<T>
ke konstruktor dari controller / class yang ingin Anda nilai
1. Tentukan kelas konfigurasi untuk mewakili struktur
Anda dapat mendefinisikan kelas dengan properti yang harus benar-benar cocok dengan tombol di pengaturan aplikasi Anda. Nama kelas tidak harus cocok dengan nama bagian dalam pengaturan aplikasi:
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. Daftarkan instance konfigurasi
Dan kemudian Anda perlu mendaftarkan instance konfigurasi ini di ConfigureServices()
dalam memulai:
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. Suntikkan IOptions
Terakhir pada pengontrol / kelas yang ingin Anda nilai, Anda perlu menyuntikkan IOptions<AppIdentitySettings>
melalui konstruktor:
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);
}
}