ASP.NET Core中的Startup

原文:連接web

Startup.cs的做用:api

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

Startup類:

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

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

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>方法構建:ide

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方法:ui

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

典型的模式是調用全部Add{Service}方法,而後調用全部services.Configure{Service}方法。請參閱配置身份服務this

對於須要大量設置的功能,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核心中間件

相關文章
相關標籤/搜索