প্রোগ্রাম এবং স্টার্টআপ ক্লাস
.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();
}
...
}
মূল্যবোধ প্রাপ্তি
অ্যাপ্লিকেশন সেটিংস থেকে আপনি কনফিগার করা মানটি পেতে পারেন এমন অনেকগুলি উপায় রয়েছে:
আপনার 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);
...
}
...
}
}
৩. ইনপুট আইওপশনস
পরিশেষে আপনি যে নিয়ামক / শ্রেণিতে মানগুলি পেতে চান তাতে আপনাকে 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);
}
}