कार्यक्रम और स्टार्टअप क्लास
.NET कोर 2.x
आपको कंस्ट्रक्टर IConfiguration
में नया करने की आवश्यकता नहीं है Startup
। इसके कार्यान्वयन को डीआई सिस्टम द्वारा इंजेक्ट किया जाएगा।
// 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 कोर 1.x
आपको Startup
एप्लेटिंग फाइलों को लोड करने के लिए बताना होगा।
// 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();
}
...
}
मान मिल रहा है
ऐसे कई तरीके हैं जिनसे आप एप्लिकेशन सेटिंग्स से कॉन्फ़िगर किए गए मान प्राप्त कर सकते हैं:
- उपयोग करने का सरल तरीका
ConfigurationBuilder.GetValue<T>
- विकल्प पैटर्न का उपयोग करना
आइए बताते हैं आपके appsettings.json
लुक इस तरह:
{
"ConnectionStrings": {
...
},
"AppIdentitySettings": {
"User": {
"RequireUniqueEmail": true
},
"Password": {
"RequiredLength": 6,
"RequireLowercase": true,
"RequireUppercase": true,
"RequireDigit": true,
"RequireNonAlphanumeric": true
},
"Lockout": {
"AllowedForNewUsers": true,
"DefaultLockoutTimeSpanInMins": 30,
"MaxFailedAccessAttempts": 5
}
},
"Recaptcha": {
...
},
...
}
सरल तरीका
आप पूरे कॉन्फ़िगरेशन को अपने कंट्रोलर / क्लास (के माध्यम से IConfiguration
) के कंस्ट्रक्टर में इंजेक्ट कर सकते हैं और उस मूल्य को प्राप्त कर सकते हैं जिसे आप निर्दिष्ट कुंजी के साथ चाहते हैं:
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);
}
}
विकल्प पैटर्न
ConfigurationBuilder.GetValue<T>
अच्छा काम करता है अगर आप केवल एप्लिकेशन सेटिंग से एक या दो मूल्यों की जरूरत है। लेकिन अगर आप ऐप सेटिंग्स से कई वैल्यूज़ प्राप्त करना चाहते हैं, या आप उन हार्ड स्ट्रिंग्स को कई जगहों पर कोड नहीं करना चाहते हैं, तो विकल्प पैटर्न का उपयोग करना आसान हो सकता है । विकल्प पैटर्न पदानुक्रम / संरचना का प्रतिनिधित्व करने के लिए कक्षाओं का उपयोग करता है।
विकल्प पैटर्न का उपयोग करने के लिए:
- संरचना का प्रतिनिधित्व करने के लिए कक्षाओं को परिभाषित करें
- उन विन्यास उदाहरणों को पंजीकृत करें जिनके खिलाफ वे वर्ग बाँधते हैं
IOptions<T>
उस नियंत्रक / वर्ग के निर्माता में इंजेक्ट करें जिस पर आप मान प्राप्त करना चाहते हैं
1. संरचना का प्रतिनिधित्व करने के लिए विन्यास कक्षाओं को परिभाषित करें
आप उन संपत्तियों के साथ वर्गों को परिभाषित कर सकते हैं , जिन्हें आपकी ऐप सेटिंग में कुंजियों का मिलान करने की आवश्यकता है । वर्ग का नाम ऐप सेटिंग में अनुभाग के नाम से मेल नहीं खाता है:
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. विन्यास उदाहरण पंजीकृत करें
और फिर आपको ConfigureServices()
स्टार्ट अप में इस कॉन्फ़िगरेशन उदाहरण को पंजीकृत करने की आवश्यकता है :
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 इंजेक्षन
अंत में नियंत्रक / वर्ग जिसे आप मान प्राप्त करना चाहते हैं, आपको IOptions<AppIdentitySettings>
कंस्ट्रक्टर के माध्यम से इंजेक्ट करने की आवश्यकता है :
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);
}
}