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核心中间件

 

posted @ 2019-06-20 10:23  Merray  Views(1874)  Comments(0Edit  收藏  举报