নেট কোরটিতে অ্যাপসেটিংস.জসন থেকে মান পাওয়া


160

আমি এখানে কী মিস করছি তা নিশ্চিত নই তবে আমি আমার নেট নেট অ্যাপ্লিকেশনটিতে আমার অ্যাপসেটেটিংস.জসন থেকে মান পেতে সক্ষম নই। আমার এই হিসাবে আমার appsettings.json আছে:

{
    "AppSettings": {
        "Version": "One"
    }
}

প্রারম্ভ:

public class Startup
{
    private IConfigurationRoot _configuration;
    public Startup(IHostingEnvironment env)
    {
        _configuration = new ConfigurationBuilder()
    }
    public void ConfigureServices(IServiceCollection services)
    {
      //Here I setup to read appsettings        
      services.Configure<AppSettings>(_configuration.GetSection("AppSettings"));
    }
}

মডেল:

public class AppSettings
{
    public string Version{ get; set; }
}

নিয়ন্ত্রক:

public class HomeController : Controller
{
    private readonly AppSettings _mySettings;

    public HomeController(IOptions<AppSettings> settings)
    {
        //This is always null
        _mySettings = settings.Value;
    }
}

_mySettingsসর্বদা নাল। আমি এখানে কি অনুপস্থিত কিছু আছে?


3
দয়া করে ডকুমেন্টেশন পড়া কিভাবে কনফিগারেশন ব্যবহার করার জন্য। আপনি আপনার স্টার্টআপ ক্লাসে ভুলভাবে কনফিগারেশন সেট আপ করেছেন।
অকর্মা

ডকুমেন্টেশন জন্য ধন্যবাদ। এটি সহায়ক ছিল।
আমান

এটি কেবলমাত্র আইকনফিগারেশনের নির্ভরতা ইনজেকশন ব্যবহার করে আরও সহজ করা যেতে পারে। যা এখানে কোডিং-issues.com/2018/10/…
রেড্ডি

উত্তর:


226

প্রোগ্রাম এবং স্টার্টআপ ক্লাস

.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>কাজ করে মহান আপনি শুধুমাত্র অ্যাপ্লিকেশন সেটিংস থেকে এক বা দুটি মানের প্রয়োজন। তবে আপনি যদি অ্যাপ্লিকেশন সেটিংস থেকে একাধিক মান পেতে চান বা আপনি একাধিক জায়গায় এই কী স্ট্রিংগুলি হার্ড কোড করতে চান না, তবে বিকল্প প্যাটার্নটি ব্যবহার করা আরও সহজ হতে পারে । বিকল্প প্যাটার্ন শ্রেণিবিন্যাস / কাঠামোর প্রতিনিধিত্ব করতে ক্লাস ব্যবহার করে।

বিকল্প প্যাটার্ন ব্যবহার করতে:

  1. কাঠামোর প্রতিনিধিত্ব করতে ক্লাস নির্ধারণ করুন
  2. কনফিগারেশন উদাহরণটি নিবন্ধ করুন যা এই ক্লাসগুলির সাথে আবদ্ধ
  3. 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);
    }
}

আমি আমার ক্লাসে থাকা মানগুলিতে কীভাবে অ্যাক্সেস করতে পারি?
লুকাশ হিরোনিমাস অ্যাডলার

1
@ লুকাসহিরোনিমাস অ্যাডলার: আপনি এর IOptionsSnapshot<T>পরিবর্তে ব্যবহার করতে পারেন IOptions<T>। আপনি এই নিবন্ধটি একবার দেখে নিতে পারেন: अर्पण . সলিউশনস / ব্লগ / আর্টিকেলস / 07/ 02/17/… । যদিও আমি নিজে চেষ্টা করার সুযোগ পাইনি।
ডেভিড লিয়াং

2
আপনি এটিকে স্নিপেটের মতো সহজ করে তুলতে পারেন?
সাইফুল নিজাম ইয়াহইয়া

8
পুরো স্ট্যাক। নেট থেকে আশ্চর্যজনক পদক্ষেপ পিছনে কি
অ্যারোন

4
ঠিক আছে, তাই নেট কোর 3 এর জন্য আপনার দরকার মাইক্রোসফ্ট।
টমাস ব্রুকনার

50

কেবল একটি যেকোন নাম.সি.এস ফাইল তৈরি করুন এবং নিম্নলিখিত কোডটি পেস্ট করুন।

using System;
using System.IO;
using Microsoft.Extensions.Configuration;

namespace Custom
{
    static class ConfigurationManager
    {
        public static IConfiguration AppSetting { get; }
        static ConfigurationManager()
        {
            AppSetting = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("YouAppSettingFile.json")
                    .Build();
        }
    }
}

আপনার ফাইলের নামের সাথে অবশ্যই ইউএপসেটিংফিল.জসন ফাইলের নামটি প্রতিস্থাপন করতে হবে।
আপনার .json ফাইলটি নীচের মত দেখতে হবে।

{
    "GrandParent_Key" : {
        "Parent_Key" : {
            "Child_Key" : "value1"
        }
    },
    "Parent_Key" : {
        "Child_Key" : "value2"
    },
    "Child_Key" : "value3"
}

এখন আপনি এটি ব্যবহার করতে পারেন। আপনি যে ক্লাসটি ব্যবহার করতে চান সেখানে আপনার রেফারেন্স যুক্ত
করতে ভুলবেন না ।

using Custom;

মান পুনরুদ্ধার করার কোড।

string value1 = ConfigurationManager.AppSetting["GrandParent_Key:Parent_Key:Child_Key"];
string value2 = ConfigurationManager.AppSetting["Parent_Key:Child_Key"];
string value3 = ConfigurationManager.AppSetting["Child_Key"];

3
উত্পাদনে এটি ব্যবহার করবেন না। এই পদ্ধতির ফলেই আমাদের ওয়েব এপিআইতে মেমরি ফাঁস হয়। আপনি যদি নেটকোর ব্যবহার করছেন তবে আপনি অক্ষরে অক্ষরে আইকনফিগারেশনটি ইনজেক্ট করতে পারেন, কেবল উপরের উত্তরগুলি দেখুন।
আন্দ্রে মান্টাস

49

কোর 2.0 এর জন্য ডেভিড লিয়াংয়ের উত্তরে যুক্ত করা -

appsettings.jsonফাইলগুলি ASPNETCORE_ENVIRONMENTভেরিয়েবলের সাথে লিঙ্কযুক্ত ।

ASPNETCORE_ENVIRONMENTপারেন মানে সেট, কিন্তু তিন মান সমর্থিত ফ্রেমওয়ার্ক দ্বারা: Development, Staging, এবং Production। যদি ASPNETCORE_ENVIRONMENTসেট না করা থাকে তবে এটি ডিফল্ট হবে Production

এই তিনটি মান জন্য এই appsettings.ASPNETCORE_ENVIRONMENT.json ফাইল বাক্সের বাইরে সমর্থিত - appsettings.Staging.json, appsettings.Development.jsonএবংappsettings.Production.json

উপরের তিনটি অ্যাপ্লিকেশন সেটিং জেসন ফাইলগুলি একাধিক পরিবেশকে কনফিগার করতে ব্যবহার করা যেতে পারে।

উদাহরণ - appsettings.Staging.json

{
    "Logging": {
        "IncludeScopes": false,
        "LogLevel": {
            "System": "Information",
            "Microsoft": "Information"
        }
    },
    "MyConfig": "My Config Value for staging."
}

Configuration["config_var"]যে কোনও কনফিগারেশন মান পুনরুদ্ধার করতে ব্যবহার করুন ।

public class Startup
{
    public Startup(IHostingEnvironment env, IConfiguration config)
    {
        Environment = env;
        Configuration = config;
        var myconfig = Configuration["MyConfig"];
    }

    public IConfiguration Configuration { get; }
    public IHostingEnvironment Environment { get; }
}

1
নেস্টেড অবজেক্টস সম্পর্কে কী?
আর্থার অ্যাটআউট

8
নেস্টেড অবজেক্টগুলি কনফিগারেশনের মাধ্যমে প্রাপ্ত করা যেতে পারে ["মাইকনফিগ: সামিথিংস্টেড"]
ওয়েইভকুকিজ

1
ফাইলে দেখা যায় github.com/aspnet/AspNetCore/blob/master/src/DefaultBuilder/src/... লাইনে 167 ASP.NET কোর বর্তমানে লোড appsettings.json+ + appsettings.{env.EnvironmentName}.json। সুতরাং এএসপি.এনইটি কোর কেবলমাত্র বিকাশ, মঞ্চায়ন এবং উত্পাদন অ্যাপসেটিংস.জসন ফাইলগুলি লোড করে যে বিবৃতিটি বর্তমানে ভুল।
এমভিডিগুন

1
তাই কি আমি কি ASPNETCORE_ENVIRONMENTপ্রতিবার উইন্ডোজ ভেরিয়েবল সেট করব ? জিনিসগুলি নেট in এ সহজতর ছিল 4.. এই জেএসওএন ধর্মান্ধরা বড়
টুলকিট

@ টুলকিট আপনি বিশ্বব্যাপী পরিবেশ পরিবর্তনশীল সেট করতে পারেন। ডকস.মাইক্রোসফট.ইন- ইউএস
অসীম গৌতম

29

আমি অনুমান করি সহজ উপায়টি ডিআই দ্বারা by নিয়ামকের কাছে পৌঁছানোর উদাহরণ।

// StartUp.cs
public void ConfigureServices(IServiceCollection services)
{
    ...
    // for get appsettings from anywhere
    services.AddSingleton(Configuration);
}

public class ContactUsController : Controller
{
    readonly IConfiguration _configuration;

    public ContactUsController(
        IConfiguration configuration)
    {
        _configuration = configuration;

        // sample:
        var apiKey = _configuration.GetValue<string>("SendGrid:CAAO");
        ...
    }
}

5
অন্যান্য উত্তরগুলি পড়া, এটি সেরা হওয়া উচিত।
26-10

আমি নিখোঁজ ছিলাম services.AddSingleton(Configuration);, এখন এটি কাজ করে
আর্থার মেডিইরোস

12

স্টার্টআপ ক্লাসের কনস্ট্রাক্টারে আপনি ইনজেকশনযুক্ত আইকনফিগারেশন অবজেক্টটি ব্যবহার করে অ্যাপসেটেটিংস.জসন এবং অন্যান্য অনেক সেটিংস অ্যাক্সেস করতে পারেন:

স্টার্টআপ.সি কনস্ট্রাক্টর

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;

        //here you go
        var myvalue = Configuration["Grandfather:Father:Child"];

    }

public IConfiguration Configuration { get; }

Appsettings.json এর সামগ্রীসমূহ

  {
  "Grandfather": {
    "Father": {
      "Child": "myvalue"
    }
  }

2
এটি ছিল 'কনফিগারেশন ["দাদু: পিতা: শিশু"] "সিনট্যাক্স যা আমাকে সহায়তা করেছিল।
জ্যাক অলিভিয়ার

2
এটি কাঠামোগত, পরিষ্কার এবং বিন্দুতে এইভাবে একটি অসামান্য উত্তর। দুর্দান্ত যোগাযোগ
জুলিসফট


1

আমার ক্ষেত্রে এটি কনফিগারেশন অবজেক্টে বাইন্ড () পদ্ধতি ব্যবহার করার মতো সহজ ছিল। এবং তারপরে ডিআই-তে অবজেক্টটি সিঙ্গলটন হিসাবে যুক্ত করুন।

var instructionSettings = new InstructionSettings();
Configuration.Bind("InstructionSettings", instructionSettings);
services.AddSingleton(typeof(IInstructionSettings), (serviceProvider) => instructionSettings);

আপনার ইচ্ছা মত নির্দেশ বস্তু জটিল হতে পারে।

{  
 "InstructionSettings": {
    "Header": "uat_TEST",
    "SVSCode": "FICA",
    "CallBackUrl": "https://UATEnviro.companyName.co.za/suite/webapi/receiveCallback",
    "Username": "s_integrat",
    "Password": "X@nkmail6",
    "Defaults": {
    "Language": "ENG",
    "ContactDetails":{
       "StreetNumber": "9",
       "StreetName": "Nano Drive",
       "City": "Johannesburg",
       "Suburb": "Sandton",
       "Province": "Gauteng",
       "PostCode": "2196",
       "Email": "ourDefaultEmail@companyName.co.za",
       "CellNumber": "0833 468 378",
       "HomeNumber": "0833 468 378",
      }
      "CountryOfBirth": "710"
    }
  }

1

ASP.NET কোর 3.1 এর জন্য আপনি এই গাইডটি অনুসরণ করতে পারেন:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1

আপনি যখন একটি নতুন এএসপি.নেট কোর 3.1 প্রকল্প তৈরি করবেন তখন আপনার নিম্নলিখিত কনফিগারেশন লাইনটি থাকবে Program.cs:

Host.CreateDefaultBuilder(args)

এটি নিম্নলিখিতগুলিকে সক্ষম করে:

  1. শাইনড কনফিগারেশনপ্রোভাইডার: একটি বিদ্যমান আইকনফিগারেশনকে উত্স হিসাবে যুক্ত করে। ডিফল্ট কনফিগারেশন ক্ষেত্রে, হোস্ট কনফিগারেশন যুক্ত করে এবং অ্যাপ্লিকেশন কনফিগারেশনের প্রথম উত্স হিসাবে সেট করে।
  2. JSON কনফিগারেশন সরবরাহকারী ব্যবহার করে appsettings.json।
  3. JSON কনফিগারেশন সরবরাহকারী ব্যবহার করে অ্যাপসেটেটিং.এনভায়রন.জসন। উদাহরণস্বরূপ, অ্যাপসেটিংস.প্রডাকশন.জসন এবং অ্যাপসেটিংস.ডেভলপমেন্ট.জসন।
  4. অ্যাপ্লিকেশনটি যখন বিকাশের পরিবেশে চালিত হয় তখন অ্যাপস সিক্রেটস।
  5. এনভায়রনমেন্ট ভেরিয়েবল কনফিগারেশন সরবরাহকারী ব্যবহার করে পরিবেশের ভেরিয়েবল।
  6. কমান্ড-লাইন কনফিগারেশন সরবরাহকারী ব্যবহার করে কমান্ড-লাইন আর্গুমেন্ট।

এর অর্থ আপনি IConfigurationএকটি স্ট্রিং কী, এমনকি নেস্ট করা মান সহ মানগুলি ইনজেক্ট এবং আনতে পারেন । মতIConfiguration["Parent:Child"];

উদাহরণ:

appsettings.json

{
  "ApplicationInsights":
    {
        "Instrumentationkey":"putrealikeyhere"
    }
}

WeatherForecast.cs

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;
    private readonly IConfiguration _configuration;

    public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration configuration)
    {
        _logger = logger;
        _configuration = configuration;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        var key = _configuration["ApplicationInsights:InstrumentationKey"];

        var rng = new Random();
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(-20, 55),
            Summary = Summaries[rng.Next(Summaries.Length)]
        })
        .ToArray();
    }
}

IConfiguration["Parent:Child"]সিনট্যাক্স সম্পর্কে আমি আরও কোথায় জানতে পারি ?
xr280xr

0

আমি মনে করি সেরা বিকল্পটি হ'ল:

  1. কনফিগার স্কিমা হিসাবে একটি মডেল শ্রেণি তৈরি করুন

  2. ডিআই-তে নিবন্ধন করুন: পরিষেবাদি.কমফিগার (কনফিগারেশন.গেটসেকশন ("ডেমোকনকিগ"));

  3. আপনার নিয়ামকটিতে ডিআই থেকে মডেল অবজেক্ট হিসাবে মানগুলি পান:

    private readonly your_model myConfig;
    public DemoController(IOptions<your_model> configOps)
    {
        this.myConfig = configOps.Value;
    }

0

উপরে Asp.net কোর 2.2 থেকে আপনি নীচের মত কোড করতে পারেন:

পদক্ষেপ 1. একটি অ্যাপসেটেটিং ক্লাস ফাইল তৈরি করুন।

এই ফাইলটিতে appsettings.json ফাইল থেকে কী দ্বারা মান পেতে সহায়তা করার জন্য কয়েকটি পদ্ধতি রয়েছে। নীচের কোড মত চেহারা:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ReadConfig.Bsl
{
  public class AppSettings
  {
      private static AppSettings _instance;
      private static readonly object ObjLocked = new object();
      private IConfiguration _configuration;

      protected AppSettings()
      {
      }

      public void SetConfiguration(IConfiguration configuration)
      {
          _configuration = configuration;
      }

      public static AppSettings Instance
      {
          get
          {
              if (null == _instance)
              {
                  lock (ObjLocked)
                  {
                      if (null == _instance)
                          _instance = new AppSettings();
                  }
              }
              return _instance;
          }
      }

      public string GetConnection(string key, string defaultValue = "")
      {
          try
          {
              return _configuration.GetConnectionString(key);
          }
          catch
          {
              return defaultValue;
          }
      }

      public T Get<T>(string key = null)
      {
          if (string.IsNullOrWhiteSpace(key))
              return _configuration.Get<T>();
          else
              return _configuration.GetSection(key).Get<T>();
      }

      public T Get<T>(string key, T defaultValue)
      {
          if (_configuration.GetSection(key) == null)
              return defaultValue;

          if (string.IsNullOrWhiteSpace(key))
              return _configuration.Get<T>();
          else
              return _configuration.GetSection(key).Get<T>();
      }

      public static T GetObject<T>(string key = null)
      {
          if (string.IsNullOrWhiteSpace(key))
              return Instance._configuration.Get<T>();
          else
          {
              var section = Instance._configuration.GetSection(key);
              return section.Get<T>();
          }
      }

      public static T GetObject<T>(string key, T defaultValue)
      {
          if (Instance._configuration.GetSection(key) == null)
              return defaultValue;

          if (string.IsNullOrWhiteSpace(key))
              return Instance._configuration.Get<T>();
          else
              return Instance._configuration.GetSection(key).Get<T>();
      }
  }
}

পদক্ষেপ 2. অ্যাপসেটিংস অবজেক্টের জন্য প্রাথমিক কনফিগারেশন

অ্যাপ্লিকেশন শুরু হওয়ার সাথে সাথে আমাদের অ্যাপসেটিংস.জসন ফাইলটি ডিক্লেয়ার এবং লোড করতে হবে এবং অ্যাপসেটিংস অবজেক্টের জন্য কনফিগারেশন তথ্য লোড করতে হবে। আমরা এই কাজটি স্টার্টআপ.cs ফাইলের কনস্ট্রাক্টরে করব। লাইন লক্ষ্য করুনAppSettings.Instance.SetConfiguration(Configuration);

public Startup(IHostingEnvironment evm)
{
    var builder = new ConfigurationBuilder()
      .SetBasePath(evm.ContentRootPath)
      .AddJsonFile("appsettings.json", true, true)
      .AddJsonFile($"appsettings.{evm.EnvironmentName}.json", true)
      .AddEnvironmentVariables();
    Configuration = builder.Build(); // load all file config to Configuration property 
    AppSettings.Instance.SetConfiguration(Configuration);       
}

ঠিক আছে, এখন আমি নীচে কিছু কী সহ একটি appsettings.json ফাইল আছে:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "ConnectionString": "Data Source=localhost;Initial Catalog=ReadConfig;Persist Security Info=True;User ID=sa;Password=12345;"
  },
  "MailConfig": {
    "Servers": {
      "MailGun": {
        "Pass": "65-1B-C9-B9-27-00",
        "Port": "587",
        "Host": "smtp.gmail.com"
      }
    },
    "Sender": {
      "Email": "example@gmail.com",
      "Pass": "123456"
    }
  }
}

পদক্ষেপ 3. একটি ক্রিয়া থেকে কনফিগার মান পড়ুন

আমি নীচে হোম কন্ট্রোলারে ডেমোকে একটি ক্রিয়া করি:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        var connectionString = AppSettings.Instance.GetConnection("ConnectionString");
        var emailSender = AppSettings.Instance.Get<string>("MailConfig:Sender:Email");
        var emailHost = AppSettings.Instance.Get<string>("MailConfig:Servers:MailGun:Host");

        string returnText = " 1. Connection String \n";
        returnText += "  " +connectionString;
        returnText += "\n 2. Email info";
        returnText += "\n Sender : " + emailSender;
        returnText += "\n Host : " + emailHost;

        return Content(returnText);
    }
}

এবং নীচে ফলাফল:

ফলাফল দেখতে ক্লিক করুন

আরও তথ্যের জন্য, আপনি নিবন্ধটি বিশদ কোডের জন্য এসপ নেট কোরটিতে অ্যাপসেটেটিংস.জসনের কাছ থেকে মূল্য পেতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.