হ্যালো! আমি আপনার “Simple Coding Tutor”। আপনার দেওয়া লেকচার ট্র্যান্সক্রিপ্টটি ASP.NET Core-এ Custom Json Configuration (লেকচার ১৫৮) নিয়ে আলোচনা করেছে। এটি মূলত বড় প্রজেক্টের Configuration ম্যানেজমেন্টের জন্য ব্যবহার করা হয়। চলুন, পুরো বিষয়টি ধাপে ধাপে শিখে নেওয়া যাক।

📝 সারসংক্ষেপ (Quick Summary for Revision)

ভবিষ্যতে দ্রুত রিভিশন দেওয়ার জন্য মূল পয়েন্টগুলো নিচে লিস্ট করা হলো:

  • সমস্যা: বড় প্রজেক্টে সব non-sensitive configuration যদি শুধুমাত্র appsettings.json ফাইলে রাখা হয়, তাহলে ফাইলটি অনেক বড় এবং ম্যানেজ করা কঠিন হয়ে যায়।
  • সমাধান: রিলেটেড configuration গুলোকে আলাদা একটি Custom JSON file (যেমন: myownconfig.json)-এ সেভ করা।
  • Setup: Program.cs ফাইলে AddJsonFile মেথড ব্যবহার করে এই নতুন JSON ফাইলটিকে Configuration Source হিসেবে যুক্ত করতে হয়।
  • Parameters: optional: true (ফাইল না থাকলেও এরর খাবে না) এবং reloadOnChange: true (রানটাইমে ফাইলে পরিবর্তন করলে অ্যাপ রিস্টার্ট/রিলোড হবে)।
  • Priority: যেহেতু এই কাস্টম ফাইলটি ডিফল্ট ফাইলের পরে লোড হয়, তাই এর Priority সবচেয়ে বেশি থাকে (এটি আগের ভ্যালুকে override করে)।

🧠 Comprehensive Breakdown

১. Custom JSON File কেন দরকার? (The “Why”) [Priority: 7/10]

Non-sensitive ডেটা (যা সিক্রেট নয়) আমরা সাধারণত appsettings.json ফাইলে রাখি। কিন্তু অ্যাপ্লিকেশন যত বড় হতে থাকে, Configuration settings-এর সংখ্যা তত বাড়তে থাকে। সব সেটিংস একটি ফাইলে রাখলে ফাইলটি অনেক বড় ও হিজিবিজি হয়ে যায়। এর বিকল্প হিসেবে, আপনি চাইলে একটি নির্দিষ্ট ফিচারের জন্য আলাদা JSON ফাইল তৈরি করতে পারেন। এতে কোড এবং কনফিগারেশন অনেক বেশি গোছানো (organized) থাকে। তবে ছোট বা মাঝারি অ্যাপ্লিকেশনের জন্য এটি খুব একটা ব্যবহার করা হয় না।

২. Custom JSON File তৈরি করা [Priority: 6/10]

  • Solution Explorer-এ প্রজেক্টের ওপর Right-click করুন > Add New Item > JSON File সিলেক্ট করুন।
  • ফাইলের একটি নাম দিন (যেমন: myownconfig.json)।
  • এবার appsettings.json থেকে নির্দিষ্ট সেকশনটি (যেমন: WeatherApi) Cut করে নতুন ফাইলে Paste করুন।

Example (myownconfig.json):

{
  "WeatherApi": {
    "ClientId": "client ID from myownconfig.json",
    "ClientSecret": "client secret from myownconfig.json"
  }
}
 

৩. Program.cs-এ Configuration Source যুক্ত করা [Priority: 10/10]

নতুন ফাইল তৈরি করলেই ASP.NET Core অটোমেটিকভাবে সেটি চিনে নেবে না। Program.cs ফাইলে Build() মেথড কল হওয়ার আগেই একে Configuration Source হিসেবে পরিচয় করিয়ে দিতে হবে।

লেকচারে দেখানো .NET 6 স্টাইলের কোড:

builder.Host.ConfigureAppConfiguration((hostContext, config) =>
{
    // config হলো IConfigurationBuilder এর একটি ইন্সট্যান্স
    config.AddJsonFile("myownconfig.json", optional: true, reloadOnChange: true);
});
 

এখানে একটি Lambda Expression ব্যবহার করা হয়েছে যা রানটাইমে অ্যাপ্লিকেশন স্টার্ট হওয়ার সময় স্বয়ংক্রিয়ভাবে কল হয়।

৪. Important Parameters: optional এবং reloadOnChange [Priority: 9/10]

AddJsonFile মেথডে দুটি অত্যন্ত গুরুত্বপূর্ণ প্যারামিটার রয়েছে:

  • optional: true এর মানে হলো এই ফাইলটি থাকা বাধ্যতামূলক নয়। কোনো কারণে যদি ফাইলটি প্রজেক্ট ফোল্ডারে না থাকে, তবুও অ্যাপ্লিকেশন ক্র্যাশ করবে না বা Exception থ্রো করবে না। যদি optional: false দেওয়া থাকে এবং ফাইলটি না পাওয়া যায়, তবে অ্যাপ স্টার্ট হবে না।
  • reloadOnChange: true এটি true থাকলে, অ্যাপ্লিকেশন চলাকালীন সময়ে (Runtime) যদি কেউ myownconfig.json ফাইলে কোনো পরিবর্তন করে সেভ করে, তবে অ্যাপ্লিকেশনটি নিজে নিজেই নতুন Configuration রিলোড করে নেবে। আপনাকে ম্যানুয়ালি অ্যাপ রিস্টার্ট করতে হবে না।

৫. Priority এবং Overriding [Priority: 8/10]

Configuration ফাইল লোড হওয়ার একটি সিরিয়াল বা order থাকে। যে ফাইলটি সবার শেষে লোড হয়, সেটির Priority সবচেয়ে বেশি থাকে। যেহেতু আমরা myownconfig.json ফাইলটিকে ডিফল্ট Configuration-এর পরে ম্যানুয়ালি অ্যাড করছি, তাই এটি সবার শেষে লোড হবে। অর্থাৎ, একই Key যদি appsettings.json এবং myownconfig.json দুটিতেই থাকে, তবে myownconfig.json-এর ভ্যালুটিই ফাইনাল ভ্যালু হিসেবে কাজ করবে।


💡 Best Practices & .NET 10 Context

লেকচারে দেখানো পদ্ধতিটি কাজ করলেও, .NET 8 থেকে .NET 10 পর্যন্ত Configuration যুক্ত করার পদ্ধতিটি আরও সহজ এবং ক্লিন করা হয়েছে। এখন আর builder.Host.ConfigureAppConfiguration ব্যবহার করার প্রয়োজন হয় না। সরাসরি builder.Configuration ব্যবহার করেই কাজ করা যায়।

Best Practices for .NET 10:

  1. Direct Configuration Setup: Program.cs-এ সরাসরি builder.Configuration ব্যবহার করুন। এতে কোড ছোট ও ক্লিন হয়। Code Implementation (.NET 10):
var builder = WebApplication.CreateBuilder(args);
 
// .NET 10 এ সরাসরি builder.Configuration এ AddJsonFile করা যায়
builder.Configuration.AddJsonFile("myownconfig.json", optional: true, reloadOnChange: true);
 
// এরপর Options Pattern ব্যবহার করে Bind করা
builder.Services.Configure<WeatherApiOptions>(builder.Configuration.GetSection("WeatherApi"));
 
var app = builder.Build();
 
  1. Environment Specific Custom Files: যদি Custom JSON ফাইল ব্যবহার করতেই হয়, তবে Environment অনুযায়ী আলাদা ফাইল রাখা ভালো প্র্যাকটিস। যেমন: myownconfig.json এবং myownconfig.Development.json
builder.Configuration
    .AddJsonFile("myownconfig.json", optional: true, reloadOnChange: true)
    .AddJsonFile($"myownconfig.{builder.Environment.EnvironmentName}.json", optional: true, reloadOnChange: true);
 
  1. When NOT to use this: লেকচারার ঠিকই বলেছেন—ছোট বা মাঝারি প্রজেক্টের জন্য Custom JSON ফাইল তৈরি করা Over-engineering। খুব প্রয়োজন না হলে সব non-sensitive কনফিগারেশন appsettings.json ফাইলেই রাখা উচিত। শুধুমাত্র Microservices বা বিশাল Monolithic আর্কিটেকচারে এটি ব্যবহার করা Best Practice।