ASP.NET Core中的Startup


原文:鏈接

Startup.cs的作用:

配置各服務和HTTP請求管道。

Startup類:

ASP.NET Core中使用按慣例Startup命名Startup.cs

ConfigureServicesConfigure在應用程序啟動時由ASP.NET Core runtime調用

public class Startup
{
    // Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        ...
    }

    // Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
        ...
    }
}

Startup在構建app host時,將為應用程序指定該類。app host這里通常為webHostProgram類中的 CreateWebHostBuilder上調用時構建的。即調用WebHostBuilderExtensions.UseStartup <TSTARTUP>方法構建:

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

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

 

HostingEnvironment 可作為Startup類構造函數參數服務,ConfigureServices用來添加其他服務,在ConfigureServices中添加后,相應的服務和應用程序就可以在Configure方法中使用。

依賴注入的常見用法Startup是注入:

public class Startup
{
    private readonly IHostingEnvironment _env;
    private readonly IConfiguration _config;
    private readonly ILoggerFactory _loggerFactory;

    public Startup(IHostingEnvironment env, IConfiguration config, 
        ILoggerFactory loggerFactory)
    {
        _env = env;
        _config = config;
        _loggerFactory = loggerFactory;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        var logger = _loggerFactory.CreateLogger<Startup>();

        if (_env.IsDevelopment())
        {
            // Development service configuration

            logger.LogInformation("Development environment");
        }
        else
        {
            // Non-development service configuration

            logger.LogInformation($"Environment: {_env.EnvironmentName}");
        }

        // Configuration is available during startup.
        // Examples:
        //   _config["key"]
        //   _config["subsection:suboption1"]
    }
}

 

ConfigureServices方法:

在startup.cs中ConfigureServices方法:

  • 可選的。
  • 在startup Configure方法之前由Host調用
  • 配置選項被設置慣例。

典型的模式是調用所有Add{Service}方法,然后調用所有services.Configure{Service}方法。請參閱配置身份服務

對於需要大量設置的功能,IServiceCollectionAdd{Service}擴展方法典型的ASP.NET Core應用程序會配置Entity Framework,Identity和MVC注冊服務:

 

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>()
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();


    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    // Add application services.
    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<ISmsSender, AuthMessageSender>();
}

Configure方法

configure方法用於指定應用程序如何響應HTTP請求。通過將中間件組件添加到IApplicationBuilder實例來配置請求管道。IApplicationBuilder可用於該Configure方法,但它未在服務容器中注冊。托管創建IApplicationBuilder並直接傳遞給Configure

ASP.NET核心模板配置與支持的管道:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}

 每個Use擴展方法都將一個或多個中間件組件添加到請求管道。例如,UseMvc擴展方法將Routing Middleware添加到請求管道並將MVC配置為默認處理程序。

請求管道中的每個中間件組件負責調用管道中的下一個組件或者在適當的時候使鏈路短路。如果中間件鏈中沒有發生短路,則每個中間件都有第二次機會在請求發送到客戶端之前處理該請求。

其他服務(例如IHostingEnvironmentILoggerFactory)也可以在Configure方法簽名中指定指定后,如果可用,則會注入其他服務。

有關如何使用IApplicationBuilder和中間件處理順序的更多信息,請參閱ASP.NET核心中間件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM