آموزش Program.cs) .NET CORE و Startup.cs)

آموزش Program.cs) .NET CORE و Startup.cs)

ما در این مقاله سعی داریم که شما را با کلاس های Program.cs و startup.cs در ساختار پروژه آشنا کنیم. در ادامه با ما همراه باشید.

program class vs startup class in asp.net core

 

بسم الله الرحمن الرحیم

آموزش برنامه نویسی

آموزش ایجاد Program.cs و Startup.cs در پروژه ASP.NET CORE

اگر به خاطر داشته باشید در مقالات قبل راجع به آموزش ایجاد پروژه ASP.NET CORE و سپس ساختار آن صحبت کردیم.

در این مقاله سعی داریم که شما را با کلاس های Program.cs و startup.cs در ساختار پروژه آشنا کنیم. در ادامه با ما همراه باشید.

این مطلب را حتما مطالعه کنید:

پوشه wwwroot در پروژه ASP.NET CORE

 

ASP.NET CORE WEB Application درواقع یک پروژه کنسول است که نقطه شروع آن Public Static Void Main() در کلاس Program است.

ما همچنین می توانیم یک Host(میزبان) برای Web Application(برنامه وب) ایجاد کنیم.

مراحل ایجاد یک Host  در ASP.NET CORE 1.X کمی متفاوت تر از ASP.NET CORE 2.X است.

اول بیایید ببینیم کلاس Program در پروژه ASP.NET CORE 1.X چگونه است که درک آن در ASP.NET CORE 2.X آسانتر باشد.

Program.cs در ASP.NET CORE 1.X



using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;

namespace MyFirstCoreApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup()
                .Build();

            host.Run();
        }
    }
}




هر برنامه وب ASP.NET CORE برای اجرا نیاز به یک Host دارد. در متد Main() باید یک محیط میزبانی وب را برای

 

 

ASP.NET CORE 1.X Web Application پیکربندی کرد.

بیایید کد بالا را گام به گام درک کنیم:

  • در ابتدا: Var Host=NewHostBuilder()

کلاس NewHostBuilder یک کلاس کمکی برای ایجاد یک Host برای برنامه های وب است. بنابراین در ابتدا باید یک شیء از آن ایجاد کنیم.

  • .UseKestrel()

متد .UseKestrel() متدی است که Kestrel را بعنوان یک سرور وب داخلی مشخص می کند.

Kestrel منبع باز و Cross-PlatForm (قابلیت اجرا برنامه در چندین پلتفرم مختلف) است. این متد طراحی شده است که پشت پراکسی کار کند. زیرا هنوز بعنوان یک وب سرور کامل نمی توان به آن اعتماد کرد.

ASP.NET CORE Application به دلیل اینکه با هر وب سرور (و نه تنها با IIS) مورد استفاده قرار می گیرد، یک Cross-PlatForm است.

از این رو، یک وب سرور خارجی مانند IIS، Apach، Nginx وجود دارد که درخواست HTTP را به سرور داخلی Kestrel ارسال کند.

  • .UseContentRoot(Directory.GetCurrentDirectory())

متد UseContentRoot() دایرکتوری فعلی را بعنوان دایرکتوری ریشه تعیین می کند که پوشه Src در پروژه ASP.NET CORE به صورت پیش فرض خواهد بود. دایرکتوری ریشه محتوا، تعیین می کند که کدام فایل های محتوا مانند فایل های نمایش، MVC، CSS، تصاویر و ... قرار گرفته باشد.

  • .UseIISIntegration()

این متد IIS را بعنوان سرور وب خارجی یا سرور پراکسی مشخص می کند.

  • .UseStartup<Startup>()

متد UseStartup استفاده از کلاس های Startup که توسط Host Web مورداستفاده قرار می گیرد، مشخص می کند.

ویژوال استودیو Startup.cs را به طور پیش فرض با هر برنامه ASP.NET CORE جدید ایجاد می کند.

  • و در آخر متد Build() نمونه ای از IWebHost را با استفاده از تمام تنظیمات فوق مشخص می کند.

در حال حاضر، محیط میزبانی را ساخته ایم. اکنون زمان شروع Web Application است.

  • Host.Run();

متد Run()، برنامه کاربردی وب را اجرا می کند. این متد تمام ارتباطات را مسدود می کند تا Host خاموش شود که برنامه خط فرمان از این نقطه به بعد تبدیل شود.

بنابراین برنامه ASP.NET CORE از متد Main() کلاس Program، شروع میشود که می توانید محیط میزبانی بسازید و برنامه وب را شروع کنید.

 

Program.cs در ASP.NET CORE 2.X




using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;

namespace MyFirstCoreApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args)
        {
            WebHost.CreateDefaultBuilder(args)
                .UseStartup()
                .Build();
        }
    }
}

همانطور که در کد بالا می بینید متد Main()، متد دیگری به نام BuildWebHost را برای بازیابی یک نمونه ازIWebHost فراخوانی می کند.

 

 

در BuildWebHost() یک WebHost پیکربندی شده ایجاد خواهد شد.

 

WebHost یک کلاس استاتیک است که می تواند برای ایجاد نمونه ای از IWebHost و IWebHostBuilder مورد استفاده قرار گیرد. متد CreatDefaultBuilder() یک نمونه جدید از WebHostBuilder را ایجاد می کند.

روش زیر متد CreatDefaultBuilder() از کد منبع در GitHub است.




public static IWebHostBuilder CreateDefaultBuilder(string[] args)
{
    var builder = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            var env = hostingContext.HostingEnvironment;

            config.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)
                {
                    config.AddUserSecrets(appAssembly, optional: true);
                }
            }

            config.AddEnvironmentVariables();

            if (args != null)
            {
                config.AddCommandLine(args);
            }
        })
        .ConfigureLogging((hostingContext, logging) =>
        {
            logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
            logging.AddConsole();
            logging.AddDebug();
        })
        .UseIISIntegration()
        .UseDefaultServiceProvider((context, options) =>
        {
            options.ValidateScopes = context.HostingEnvironment.IsDevelopment();
        });

    return builder;
}





همانطور که در بالا می بینید، متد CreatDefaultBuilder() نمونه ای از WebHostBuilder، Kestrel، دایرکتوری ریشه محتوا، یکپارچه سازی IIS را همانند متد Main() در ASP.NET CORE 1.X ایجاد می کند.

 

 

 

تا اینجا راجع به Program.cs و نحوه ساخت آن در پروژه صحبت کردیم. حال به صحبت راجع به Startup.cs در ساختار پروژه ASP.NET CORE می پردازیم.

در این قسمت، ما یک مرور کلی از کلاس Startup موجود در Startup.cs در پوشه "ریشه" این پروژه خواهیم داشت.

برنامه ASP.NET CORE باید شامل کلاس Startup باشد. این مانند Global.asax در برنامه قدیمی .NET است.

کلاس Startup، همانطور که از نامش مشخص است، در ابتدای کار برای شروع برنامه اجرا می شود و می توان آن را با استفاده از متد UseStartup<T>() در متد Main() به صورت زیر تنظیم کرد.


public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args)
    {
        WebHost.CreateDefaultBuilder(args)
            .UseStartup()
            .Build();
    }
}



این کلاس را در ویژوال استودیو با کلیلک بر روی Startup.cs در Solution Explorer باز کنید. (تصویر زیر یک کلاس پیش فرض Startup در ASP.NET CORE 2.X است)

 

startup

همانطور که در تصویر بالا می بینید، کلاس Startup شامل 2 روش عمومی است:

  • ConfigureServices
  • Configure

 در ادامه به این دو متد می پردازیم:

1. ()ConfigureServices

در این متد شما می توانید کلاس های وابسته ومربوط را ثبت کنید. پس از ثبت کلاس ها، میتوان آن ها را در هر نقطه از برنامه استفاده کرد. البته شما فقط باید آن را در پارامتر سازنده یک کلاس که می خواهید از آن استفاده کنید، بکار ببرید.

ASP.NET CORE کلاس وابسته را بعنوان "سرویس" تعریف می کند. بنابراین هر زمان که بخواهید "سرویس" را فراخوانی کنید، می توان بعنوان یک کلاس که در بعضی کلاس های دیگر مورد استفاده قرار می گیرد، بکار گرفته شود.

2. ()Configure

متد Configure() یک مکان برای درخواست پیکربندی برنامه تان است. ASP.NET CORE اجزای میان افزاری را برای این درخواست ها معرفی کرده است که بر روی هر درخواست اجرا می شود. شما در این میان افزار، نقش کسی را دارید که درخواست می دهد. با این کار عملکرد برنامه شما نیز افزایش خواهد یافت.




public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

 

"در آخر امیدواریم که از این مقاله آموزشی بازخورد کافی را برده باشید."

 

"مجموعه  ABLY"

 

 

 

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس