Program ve Başlangıç sınıfı
.NET Core 2.x
Yeni gerekmez IConfiguration
içinde Startup
yapıcısı. Uygulanması DI sistemi tarafından enjekte edilecektir.
// 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 Çekirdek 1.x
Startup
Appsettings dosyalarını yüklemenizi söylemelisiniz .
// 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();
}
...
}
Değerleri Alma
Uygulama ayarlarından yapılandırdığınız değeri elde etmenin birçok yolu vardır:
- Kullanmanın basit yolu
ConfigurationBuilder.GetValue<T>
- Seçenek Desenini Kullanma
Diyelim ki appsettings.json
görünüşünüz şöyle:
{
"ConnectionStrings": {
...
},
"AppIdentitySettings": {
"User": {
"RequireUniqueEmail": true
},
"Password": {
"RequiredLength": 6,
"RequireLowercase": true,
"RequireUppercase": true,
"RequireDigit": true,
"RequireNonAlphanumeric": true
},
"Lockout": {
"AllowedForNewUsers": true,
"DefaultLockoutTimeSpanInMins": 30,
"MaxFailedAccessAttempts": 5
}
},
"Recaptcha": {
...
},
...
}
Basit yol
Tüm yapılandırmayı denetleyici / sınıfınızın yapıcısına (yoluyla IConfiguration
) enjekte edebilir ve belirtilen bir anahtarla istediğiniz değeri alabilirsiniz:
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);
}
}
Seçenekler Desen
ConfigurationBuilder.GetValue<T>
Sadece uygulama ayarlarından bir ya da iki değeri gerekiyorsa iyi çalışıyor. Ancak uygulama ayarlarından birden fazla değer almak istiyorsanız veya bu anahtar dizeleri birden çok yerde sabit olarak kodlamak istemiyorsanız, Seçenekler Kalıbı'nı kullanmak daha kolay olabilir . Seçenek deseni, hiyerarşiyi / yapıyı temsil etmek için sınıfları kullanır.
Seçenek desenini kullanmak için:
- Yapıyı temsil edecek sınıfları tanımlama
- Bu sınıfların bağlandığı yapılandırma örneğini kaydedin
- Değer
IOptions<T>
almak istediğiniz denetleyicinin / sınıfın yapıcısına enjekte edin
1. Yapıyı temsil edecek yapılandırma sınıflarını tanımlayın
Tam olarak eşleşmesi gereken özelliklere sahip sınıflar tanımlayabilirsinizUygulama ayarlarınızdaki anahtarlarla . Sınıfın adının uygulama ayarlarındaki bölümün adıyla eşleşmesi gerekmez:
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. Yapılandırma örneğini kaydedin
Ve sonra bu yapılandırma örneğini ConfigureServices()
başlangıçta kaydetmeniz gerekir :
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. IOptions enjekte edin
Son olarak, değerleri almak istediğiniz denetleyici / sınıfta, IOptions<AppIdentitySettings>
yapıcı aracılığıyla enjekte etmeniz gerekir :
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);
}
}