ASP.NET Core - 源码解析 - Startup.cs (二)

本篇已收录至 asp.net core 随笔系列

Reference

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.2

谈谈 startup 作用

  • 可以在 startup 中配置(注册) app 所需要的 service.
  • 定义 http 请求的 pipeline. 比如指定使用的静态文件, 默认路由等等.

Startup示例

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddDbContext<MovieContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("MovieDb")));
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseMvc();
    }
}

DI示例 : 在其他的文件中使用Startup中注册的 EF core 的 DBContext, 通过构造函数传参的形式, 将注册的 service 注入到 IndexModel 当中

public class IndexModel : PageModel
{
    private readonly MovieContext _context;

    public IndexModel(MovieContext context)
    {
        _context = context;
    }
    // ...
    public async Task OnGetAsync()
    {
        var movies = from m in _context.Movies
                        select m;
        Movies = await movies.ToListAsync();
    }
}

Http 请求管道(即 request pipeline)实际上是一系列的中间件, 每个中间件会对 HttpContext 进行一些特定的异步的处理或者响应这个 HttpContext

public void ConfigureStaging(IApplicationBuilder app, IHostingEnvironment env)
{
    if (!env.IsStaging())
    {
        throw new Exception("Not staging.");
    }

    app.UseExceptionHandler("/Error");
    app.UseStaticFiles();
    app.UseMvc();
}
posted @ 2020-04-03 13:57  YanyuWu  阅读(182)  评论(0编辑  收藏  举报