فرض کنید در شرکتی کار میکنید که محیطهای مختلفی مانند Development، QA، Staging و غیره را نگهداری میکند. اکنون بارها پیش میآید که بخشی از کد در یک محیط کار میکند و همان کد در محیط دیگری کار نمیکند. در این شرایط، شما باید محیط دیگر را به صورت محلی پیکربندی کنید و باید هر یک از پیکربندیها را تغییر دهید، مانند - connectionstring، url، مسیر راهنمای و غیره. بنابراین، برای اینکه زندگی توسعهدهنده را آسان کنیم، میتوانیم تنظیمات خاص محیط را حفظ کنیم. و بر این اساس بارگیری کنید.
بیایید قدم به قدم ببینیم که چگونه می توانیم از این ویژگی در NET Core Web API استفاده کنیم.
- ویژوال استودیو را باز کنید و یک پروژه جدید ایجاد کنید.
- قالب API را انتخاب کرده و روی دکمه OK کلیک کنید.
![فایل پیکربندی سفارشی ویژه محیط بارگذاری هسته دات نت](http://pezhvak24.ir/dl/10kcor/cscd/article/net-core-load-environment-specific-custom-config-file/Images/.NET Core Load Environment Specific Custom Config File.png)
ایجاد دو فایل پیکربندی مختلف، به عنوان مثال، فایل های JSON - develop.json و staging.json. هر دو دارای مقادیر پارامترهای مختلف هستند.
development.json
- {
- "Configuration": {
- "ConnectionString": "Server={devservername};Database={dbname};User ID={devuserid};Password={devpassword};"
- }
- }
staging.json
- {
- "Configuration": {
- "ConnectionString": "Server={stagingservername};Database={dbname};User ID={staginguserid};Password={stagingpassword};"
- }
- }
یک مدل مطابق با فایل های پیکربندی خود ایجاد کنید.
- namespace EnvironmentSpecificCustomConfig
- {
- public class Configuration
- {
- public string ConnectionString { get; set; }
- }
- }
در سازنده کلاس راه اندازی، باید یک JSON اضافه کنیم که نام آن باید مقدار پارامتر EnvironmentName باشد که از طریق IHostingEnvironment دریافت می کنیم.
یک کلاس Configuration به مجموعه سرویس اضافه کنید تا بتوانیم هر زمان که لازم باشد آن را تزریق کنیم.
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- namespace EnvironmentSpecificCustomConfig
- {
- public class Startup
- {
- public Startup(IConfiguration configuration, IHostingEnvironment env)
- {
- var builder = new ConfigurationBuilder()
- .SetBasePath(env.ContentRootPath)
- .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
- .AddJsonFile($"Config/{env.EnvironmentName}.json", optional: false, reloadOnChange: true)
- .AddEnvironmentVariables();
- configuration = builder.Build();
- Configuration = configuration;
- }
- public IConfiguration Configuration { get; }
- // This method gets called by the runtime. Use this method to add services to the container.
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddSingleton(Configuration.GetSection("Configuration").Get<Configuration>());
- services.AddMvc();
- }
- // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
- public void Configure(IApplicationBuilder app, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- app.UseMvc();
- }
- }
- }
در ValuesController، کلاس Configuration را از طریق سازنده تزریق کنید
با استفاده از آن نمونه Configuration، رشته اتصال را دریافت کرده و آن را از متد GET ValuesController برگردانید.
- using Microsoft.AspNetCore.Mvc;
- using System.Collections.Generic;
- namespace EnvironmentSpecificCustomConfig.Controllers
- {
- [Route("api/[controller]")]
- public class ValuesController : Controller
- {
- private Configuration configuration { get; set; }
- public ValuesController(Configuration configuration)
- {
- this.configuration = configuration;
- }
- // GET api/values
- [HttpGet]
- public IEnumerable<string> Get()
- {
- return new string[] { "ConnectionString", configuration.ConnectionString };
- }
- // GET api/values/5
- [HttpGet("{id}")]
- public string Get(int id)
- {
- return "value";
- }
- // POST api/values
- [HttpPost]
- public void Post([FromBody]string value)
- {
- }
- // PUT api/values/5
- [HttpPut("{id}")]
- public void Put(int id, [FromBody]string value)
- {
- }
- // DELETE api/values/5
- [HttpDelete("{id}")]
- public void Delete(int id)
- {
- }
- }
- }
تا کنون، ما یک فایل JSON با EnviromentName اضافه کردهایم، اما ممکن است این سوال پیش بیاید که از کجا میتوانیم آن محیط را تنظیم کنیم.
روی نام پروژه کلیک راست کرده و روی "Properties" کلیک کنید.
تب "Debug" را انتخاب کنید و در سمت راست، می توانید Environment Variables را ببینید.
به طور پیش فرض، توسعه برای ASPNETCORE_ENVIRONMENT تنظیم شده است، بنابراین از هم اکنون نیازی به تغییر آن نیست.
![فایل پیکربندی سفارشی ویژه محیط بارگذاری هسته دات نت](http://pezhvak24.ir/dl/10kcor/cscd/article/net-core-load-environment-specific-custom-config-file/Images/.NET Core Load Environment Specific Custom Config File2.png)
بیایید برنامه را اجرا کنیم و در نتیجه میتوان رشته اتصال را با تمام مقادیر مربوط به توسعه مشاهده کرد.
![فایل پیکربندی سفارشی ویژه محیط بارگذاری هسته دات نت](http://pezhvak24.ir/dl/10kcor/cscd/article/net-core-load-environment-specific-custom-config-file/Images/.NET Core Load Environment Specific Custom Config File3.jpg)
اکنون دوباره به تب Project Properties >> Debug رفته و مقدار را از Development به Staging تغییر دهید.
![فایل پیکربندی سفارشی ویژه محیط بارگذاری هسته دات نت](http://pezhvak24.ir/dl/10kcor/cscd/article/net-core-load-environment-specific-custom-config-file/Images/.NET Core Load Environment Specific Custom Config File4.png)
یک بار دیگر برنامه را اجرا کنید. این بار، می توانید رشته اتصال را با مقادیر پارامتر مربوط به Staging مشاهده کنید.
![فایل پیکربندی سفارشی ویژه محیط بارگذاری هسته دات نت](http://pezhvak24.ir/dl/10kcor/cscd/article/net-core-load-environment-specific-custom-config-file/Images/.NET Core Load Environment Specific Custom Config File5.jpg)
نمونه کد را می توانید از اینجا دانلود کنید .