zoukankan      html  css  js  c++  java
  • Startup 类

       Startup 类的作用:

    1.    配置应用所需的任何服务
    2.    定义请求处理管道
    3.    配置(或注册)服务的代码添加到Startup.ConfigureServices方法中。服务是应用使用的组件。例如,Entity Framework Core上下文对象是一项服务。
    4.    配置请求处理管道的代码添加到Startup.Configure方法中。管道有一系列中间件组建组成。例如,中间件可能处理对静态文件的请求或将HTTP请求重定向到HTTPS。每个中间件在HttpContext上执行异步操作,然后调用管道中的下一个中间件或终止请求。
      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();
          }
      }

      在构建应用的主机时,系统为应用指定Startup类。在Program类的主机生成器上调用BUild时,将生成应用的主机。通常在主机生成器上调用WebHostBuilderExtensions.UseStartup<TStartup> 方法来指定Startup类; 

                 

    public class Program
        {
            public static void Main(string[] args)
            {
                var host = CreateWebHostBuilder(args).Build();
    
                using (var scope = host.Services.CreateScope())
                {
                    var services = scope.ServiceProvider;
    
                    try
                    {
                        var context = services.
                            GetRequiredService<RazorPagesMovieContext>();
                        context.Database.Migrate();
                        SeedData.Initialize(services);
                    }
                    catch (Exception ex)
                    {
                        var logger = services.GetRequiredService<ILogger<Program>>();
                        logger.LogError(ex, "An error occurred seeding the DB.");
                    }
                }
    
                host.Run();
            }
    
            public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>();
        }

          在 Startup类中注入依赖关系的常见用途为注入:

    •        IHostingEnvironment 按环境配置服务
    •        IConfiguration  读取配置
    •        ILoggerFactory 在记录器中创建Startup.ConfigureServices.
            private readonly IHostingEnvironment _env;
            ILogger _logger;
            public Startup(IHostingEnvironment env, ILoggerFactory loggerFactory, IConfiguration configuration)
            {
                _env = env;
                _logger = loggerFactory.CreateLogger<Filters>();
                Configuration = configuration;
            }

          ConfigureServices方法

           主机可能会在调用Startup方法之前配置某些服务。

           对于需要大量设置的功能,IServiceCollection 上有 Add{Service} 扩展方法。 典型 ASP.NET Core 应用将为实体框架、标识和 MVC 注册服务:

        

     public void ConfigureServices(IServiceCollection services)
            {
                services.AddDbContext<RazorPagesMovieContext>(options =>
                        options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
                services.AddMvc(options =>
                {
                    options.Filters.Add(new Filters(_logger));
                });
    }

        将服务添加到服务容器,使其在应用和Configure方法中可用

            Configure方法

             Configure 方法用于指定应用响应 HTTP 请求的方式。可通过将中间件组建添加到IApplicationBuilder 实例来配置请求管道。

    ASP.NET Core 模板配置的管道支持:

     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()扩展方法将路由中间件添加到请求管道,并将 MVC 配置为默认处理程序。

       请求管道中的每个中间件组件负责调用管道中的下一个组件,或在适当情况下使链发生短路。如果中间件链中未发生短路,则每个中间件都有第二次机会再将请求发送到客户端前处理该请求。

  • 相关阅读:
    python 字符串中的%s与format
    python中的virtualenv是干嘛的?
    grep 与 find 简单命令
    git merge 和 git rebase的区别
    git stash的用法
    git push的用法
    git pull与git fetch的区别
    辟谣平台 踩坑记(一)
    微信JS-SDK开发 入门指南
    linux 写U盘出现的问题
  • 原文地址:https://www.cnblogs.com/ljknlb/p/10598926.html
Copyright © 2011-2022 走看看