
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر
یادگیری MVC Core از مبانی تا پیشرفته: شیگرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژههای کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!
مشاهده بیشترمشخصات مقاله
آموزش MVC Core-آموزش پیکربندی MVC Core
آموزش MVC Core-آموزش پیکربندی MVC Core
مشکل
چگونه تنظیمات پیکربندی را از منابع مختلف بخوانیم و در برنامه خودمان استفاده کنیم؟
راه حل
یک پروژه خالی ایجاد کنید و فایل های appsettings.json و appsettings.Development.json در پروژه خود اضافه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // appsettings.json { "Section1" : { "SettingA" : "ValueA" , "SettingB" : "ValueB" }, "Section2" : { "SettingC" : "ValueC" } } // appsettings.Development.json { "Section1" : { "SettingA" : "Dev_ValueA" }, "Section2" : { "SettingC" : "Dev_ValueC" } } <button></button> |
سپس، تنظیمات پیکربندی را در constructor برای کلاس Startup بخوانید.
1 2 3 4 5 6 7 8 | public static IConfiguration Config { get; private set; } public Startup( IConfiguration config) { Config = config; } <button></button> |
سپس گزینه های سرویس(option services) را در متد ConfigureServicees() از کلاس Startup اضافه کنید:
1 2 3 4 5 6 7 8 | public void ConfigureServices( IServiceCollection services) { // setup dependency injection in service container services.AddOptions(); services.Configure(Config); } <button></button> |
در نهایت، تنظیمات را به عنوان IOptions interface جایی که T POCO شما است تزریق می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class HelloWorldMiddleware { private readonly RequestDelegate next; private readonly AppSettings settings; public HelloWorldMiddleware( RequestDelegate next, IOptions options) { this.next = next; this.settings = options.Value; } public async Task Invoke(HttpContext context) { var jsonSettings = JsonConvert.SerializeObject(this.settings); await context.Response.WriteAsync(jsonSettings); } } <button></button> |
مباحثه
ASP.NET Core دارای یک مکانیزم ساده برای خواندن تنظیمات برنامه از منابع مختلف مانند فایل JSON، متغیرهای محیطی(Environment variables)، و یا حتی منابع داده های سفارشی(custom data sources)را دارد. همچنین استفاده از settings، به لطف تزریق وابستگی(Dependency Injection) ساده است.
اگرچه شبیه جادو(تنظیمات شما چگونه لود شده است!!!) ASP.NET Core 2.0 تنظیمات پیکر بندی ای که اضافه شده است را در پشت متد CreateDefaultBuilder() از WebHost ، در Program.cs مخفی می کند. ICconfiguration سپس به container سرویس اضافه می شود و در بقیه برنامه شما در دسترس است.ما این را برای اضافه کردن گزینه ها(options) در Startup استفاده کردیم. برای دیدن این، روش BuildWebHost() را در Program.cs جایگزین کنید و برنامه را اجرا کنید. شما نتیجه مشابهی خواهید گرفت.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | public static IWebHost BuildWebHost(string[] args) { return WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, builder) => { var env = context.HostingEnvironment; builder.AddJsonFile( "appsettings.json" , optional: true, reloadOnChange: true) .AddJsonFile($ "appsettings.{env.EnvironmentName}.json" , optional: true, reloadOnChange: true); if (env.IsDevelopment()) { var appAssembly = Assembly.Load( new AssemblyName(env.ApplicationName)); if (appAssembly != null) { builder.AddUserSecrets(appAssembly, optional: true); } } builder.AddEnvironmentVariables(); if (args != null) { builder.AddCommandLine(args); } }) .UseStartup<startup>() .Build(); } </startup><button></button> |
در راه حل فوق دو منبع فایل JSON ارائه می شوند. نکته مهم این است که این منابع به صورت متوالی خوانده شوند و تنظیمات را از منبع قبلی بازنویسی کنند. شما می توانید این را در راه حل بالا ببینید. خروجی مقدار تنظیم B از فایل تنظیمات اول در حالی که تنظیمات دیگر توسط فایل تنظیمات دوم رونویسی می شود را نشان می دهد.
توجه داشته باشید که یک public static property دارای مثال IConfiguration است تا بتوان آن را در تمام برنامه ها استفاده کرد مانند –
1 | var valueA = Config[ "Section1:SettingA" ];<button></button> |
با این حال روش بهتری برای خواندن تنظیمات وجود دارد، به عنوان مثال تنظیمات را از یک کلاس POCO تایپ شده بخوانید و و سپس آن را به عنوان وابستگی به middleware، controllers ها و غیره تزریق کنید.در راه حل فوق، من از میان پست های قبلی استفاده کرده ام تا این الگو را نشان دهم.
شما همچنین می توانید کلاس های POCO را برای بخش های مختلف در فایل تنظیمات داشته باشید و با استفاده از روش GetSection () در ICconfiguration آنها را بخوانید.
1 2 | services.Configure(Config.GetSection( "Section1" )); <button></button> |
همچنین ممکن است تنظیمات در کد را با استفاده از overload of IserviceCollection منتشر کنید. Configureکد lambda را قبول می کند.
1 2 3 4 5 | services.Configure(options => { options.Section1.SettingA = "SomeValue" ; }); <button></button> |
شما می توانید Source Code این مقاله را از لینک زیر دانلود کنید:
1 | https: //github.com/TahirNaushad/Fiver.Asp.Configuration<button></button> |
شما دانشجویان گرامی می توانید فایل مربوط به این آموزش را از قسمت پایانی این مقاله دانلود نمایید .